【问题标题】:StaleElementReferenceException even when having explicit waitStaleElementReferenceException 即使有明确的等待
【发布时间】:2021-03-17 18:46:30
【问题描述】:

我一直在尝试从 AlgoExplorer 网站抓取数据。它有一个带有分页的表来存储数据。即使我使用显式等待来单击“下一步”按钮,它仍然会收到 StaleException。 这是我的一段代码和错误图像:

for i in tqdm(range(5)): 
  page = driver.find_element_by_tag_name('tbody').find_elements_by_tag_name('a')
  for e in page:
    pages.append(e.text)
  WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.pagination.next'))).click()

当然,每个变量都已声明,库也已导入。

你能解释一下为什么我仍然有这个例外吗? enter image description here

【问题讨论】:

  • 提供 HTML...也许尝试等待元素存在,然后实现可点击。
  • @GajJulije 感谢您回复我。我也试过了。我什至试图等待元素(我需要的)可见性,抓取它,然后等待可点击的按钮点击它。它仍然不起作用。但是,我不确定我可以在此处显示 HTML 的哪些部分?

标签: python selenium selenium-webdriver staleelementreferenceexception


【解决方案1】:

当元素不再附加到页面时会引发 StaleElementReferenceException。我的猜测是这个序列看起来像:

  1. 元素已找到
  2. html dom 已重建 - 可以使用使用的定位器找到元素,但它不是第 1 步中找到的元素)
  3. js 脚本尝试与在步骤 1 中找到的元素进行交互)但它不是相同的元素(它具有相同的属性等,但在 Selenium 的情况下它是不同的元素

你可以通过检查https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver添加/删除了哪些DOM元素来验证我的假设

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多