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

使用Selenium显式等待仍抛出StaleElementReferenceException的原因咨询

使用Selenium显式等待仍抛出StaleElementReferenceException的原因咨询

我在调用这段Selenium代码时,会周期性地碰到StaleElementReferenceException异常——本来以为用了显式等待WebDriverWait结合element_to_be_clickable条件,就不会出现这种问题了:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, tag))).click()

后来我写了一段带重试逻辑的代码才解决了问题,但始终没搞明白为什么原本的显式等待方案会抛出这个异常:

from datetime import datetime, timedelta
from selenium.common.exceptions import TimeoutException, StaleElementReferenceException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

def click_element_with_retry(driver, tag, seconds):
    # 不知道为啥单独用element_to_be_clickable不管用,会周期性抛出StaleElementReferenceException
    end_time = datetime.now() + timedelta(seconds=seconds)
    while datetime.now() < end_time:
        try:
            WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, tag))).click()
            break
        except TimeoutException:
            raise_vba_error_message_and_quit(driver, f"Mars Web element could not be found after timeout", "Timeout Error")
        except StaleElementReferenceException:
            continue

有没有大佬能分析下可能的原因?我用的是Edge驱动,这个会不会有影响?也可以推荐一些相关的知识点内容~

备注:内容来源于stack exchange,提问作者PaMcD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:49:51