使用 Python 迭代时出现 StaleElementException
简介
自动化网页抓取任务时,这是必不可少的有效地处理页面交互以避免异常。可能出现的一个常见问题是 StaleElementException,表明 Web 元素不再有效。
根本原因和解决方案
在给定的代码中,发生 StaleElementException因为在对元素执行操作之前页面尚未完全加载。为了解决这个问题,可以使用 WebDriverWait。 WebDriverWait 允许指定显式等待条件,直到元素可用。
使用 WebDriverWait 的代码:
from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait driver.get('https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=sonicare+toothbrush') for page in range(1, last_page_number + 1): try: button = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//a[@id="pagnNextString"]'))) button.click() except TimeoutException: break
在此更新的代码中,WebDriverWait 与显式一起使用条件是等待“下一步”按钮可单击。这可以确保页面已完全加载并且元素在继续之前可用。
附加说明
以上是如何防止 Selenium 网页抓取中的 StaleElementException?的详细内容。更多信息请关注PHP中文网其他相关文章!