如何用Python Selenium WebDriver提取格式为"2023-04-17"的时间
用Python Selenium提取指定格式时间的正确方法
错误原因分析
你之前的代码存在两个核心问题:
- 元素定位失效:第一个代码里的XPATH依赖
id="content",但给定的HTML中并没有这个节点,导致无法定位到元素;同时find_element()返回单个元素,不能用for循环遍历。 - CSS选择器语法错误:第二个代码里的
div.medium-widget event-widget last.time写法错误,多类名需要用点连接,正确写法应为div.medium-widget.event-widget.last time。
两种可行的提取方案
方案1:通过页面文本拼接获取完整日期
利用页面中time标签内的分段文本,拼接成目标格式:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 假设已加载目标页面 # 定位time元素 time_element = driver.find_element(By.CSS_SELECTOR, "div.medium-widget.event-widget.last time") # 提取年份部分和日期部分并拼接 year_segment = time_element.find_element(By.CLASS_NAME, "say-no-more").text date_segment = time_element.text.strip() full_date = year_segment + date_segment print(full_date) # 输出:2023-04-17
方案2:读取datetime属性直接截取(更高效)
time标签的datetime属性包含标准时间格式,直接截取前10位即可得到目标格式:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 假设已加载目标页面 time_element = driver.find_element(By.CSS_SELECTOR, "div.medium-widget.event-widget.last time") # 获取datetime属性值并截取前10位 full_date = time_element.get_attribute("datetime")[:10] print(full_date) # 输出:2023-04-17
更可靠的定位方式
如果不想依赖多类名的完整匹配,也可以用XPATH模糊定位:
time_element = driver.find_element(By.XPATH, "//div[contains(@class, 'event-widget')]//time")
这种方式避免了类名顺序变化导致的定位失效问题。
内容的提问来源于stack exchange,提问作者Kishan Chavda
相关产品推荐
相关产品推荐

