陈旧元素异常是在使用WebDriver对象的findElement或findElements方法时可能会遇到的一种异常。这种异常通常是由于在查找元素之前,页面上的元素已经发生了变化或者不再存在,导致无法找到该元素而抛出的异常。
以下是一些解决陈旧元素异常的方法:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素出现
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "element_id"))
)
# 等待元素消失
element = WebDriverWait(driver, 10).until_not(
EC.presence_of_element_located((By.ID, "element_id"))
)
from selenium.common.exceptions import StaleElementReferenceException
try:
element = driver.find_element(By.ID, "element_id")
except StaleElementReferenceException:
time.sleep(2) # 等待2秒
element = driver.find_element(By.ID, "element_id")
driver.refresh()
element = driver.find_element(By.ID, "element_id")
需要注意的是,陈旧元素异常通常是由于页面上的元素发生变化导致的,建议在查找元素之前先确保页面加载完成,并且元素已经出现在DOM中。另外,合理使用显式等待和刷新页面等方法可以提高元素的查找成功率。