使用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
相关产品推荐
相关产品推荐

