You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium从HTML中获取完整日期值的解决方法

问题解决方法

原因说明

你遇到的问题核心是两类常见原因:

  1. Selenium默认启动的Chrome浏览器开启了自动翻译/日期本地化转换功能,会自动把页面里的数字日期格式转换为带月份名的显示格式,.text属性取的是渲染后用户可见的文本,因此拿到的是转换后的结果
  2. 等待条件仅判断元素加载到DOM就返回,可能对应修改日期显示的JS逻辑还未执行完毕,或者.text本身受页面CSS、渲染逻辑影响无法拿到原始DOM文本

具体修复方案

方案1:禁用Chrome浏览器的自动翻译和日期格式化

在初始化Chrome driver时添加启动参数,禁止浏览器自动修改页面内容:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 禁用自动翻译功能
chrome_options.add_argument("--disable-translate")
# 固定浏览器语言为英文,避免日期本地化转换
chrome_options.add_argument("--lang=en-US")
chrome_options.add_experimental_option("prefs", {"intl.accept_languages": "en-US,en"})

# 启动时传入配置
driver = webdriver.Chrome('chrome/chromedriver', options=chrome_options)

方案2:直接获取DOM原始文本,替换.text取值方式

.text取的是渲染后可见文本,改用get_attribute("textContent")可以拿到DOM节点中存储的原始文本内容,不受页面渲染逻辑影响:

for element in elements:
    # 替换原有element.text写法
    raw_content = element.get_attribute("textContent").strip()
    result.append(raw_content)

方案3:调整元素等待条件

把仅判断元素存在的presence_of_all_elements_located替换为判断元素可见的visibility_of_all_elements_located,确保所有JS逻辑执行完毕后再取值:

elements = WebDriverWait(driver, 10).until(
    EC.visibility_of_all_elements_located((By.CLASS_NAME, "status-param"))
)

补充兜底方案

如果上述方案执行后仍有异常,可以直接拿到元素的原始HTML后用正则匹配完整日期格式:

import re
# 匹配xx.xx.xxxx格式的日期
date_pattern = re.compile(r'\d{2}\.\d{2}\.\d{4}')
for element in elements:
    raw_html = element.get_attribute("innerHTML")
    match_res = date_pattern.search(raw_html)
    if match_res:
        full_date = match_res.group()
        # 自行拼接需要的文本前缀即可

内容的提问来源于stack exchange,提问作者Termate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 20:36:03