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

页面刷新后出现stale element reference错误,求Selenium代码解决方案

页面刷新后Stale Element Reference错误的解决办法

问题根源

页面刷新后,你之前在循环外定位的table元素已经失效——因为整个DOM重新渲染了,旧的table元素不再附着在当前页面文档上,后续用它查找子元素自然会报错。

修正代码

把表格的定位逻辑移到while循环内部,每次刷新页面后重新获取最新的table元素:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

while True:
    # 每次刷新后重新等待表格加载并定位
    table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,
                                                               "/html/body/div[1]/div["
                                                               "1]/section/section/section/main/section/section/div["
                                                               "2]/div/div[2]/div[1]/div/div[2]/table")))
    # 等待表格行全部加载完成
    rows = WebDriverWait(table, 999).until(EC.presence_of_all_elements_located((By.XPATH, ".//tbody/tr")))
    for row in rows:
        td_list = [td.text for td in row.find_elements(By.XPATH, ".//td")]
        if td_list[2] == "Done":
            print(f"{td_list[1]}\n{td_list[2]}\n{td_list[9]}\n{td_list[15]}\n{td_list[19]}\n")
    driver.refresh()

额外优化点

  • 别用绝对XPATH,这种路径只要页面结构稍微变一点就会失效,建议换成基于元素属性的定位,比如表格的id、class,或者包含的特征文本。
  • 加个异常捕获,防止偶尔页面加载失败导致程序直接崩掉:
while True:
    try:
        table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "...")))
        rows = WebDriverWait(table, 999).until(EC.presence_of_all_elements_located((By.XPATH, ".//tbody/tr")))
        for row in rows:
            td_list = [td.text for td in row.find_elements(By.XPATH, ".//td")]
            if td_list[2] == "Done":
                print(f"{td_list[1]}\n{td_list[2]}\n{td_list[9]}\n{td_list[15]}\n{td_list[19]}\n")
        driver.refresh()
    except Exception as e:
        print(f"出错了: {e}")
        driver.refresh()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:15:35