【问题标题】:Collecting links using Selenium results in StaleElementReferenceException使用 Selenium 收集链接会导致 StaleElementReferenceException
【发布时间】:2021-05-15 02:02:10
【问题描述】:

我在 Stackoverflow 上搜索了一段时间,现在试图为我的特定用例找到一个修复程序,因为我不时(不是一直)收到 StaleElementReferenceException 异常,但我发现似乎没有任何效果。

我正在尝试抓取页面并收集页面中的所有链接。

driver.get(SOME_URL)
links = driver.find_elements_by_tag_name('a')
for link in links:
      href = link.get_attribute('href')
      ... DO_SOMETHING_WITH_HREF ...

我尝试过使用隐式等待并尝试让我的脚本休眠几秒钟,但两者都不起作用。我也一直在研究明确的等待,但我知道这些是不可能的,因为链接可能出现在页面上的任何地方。让它没有我等待的特定元素。

【问题讨论】:

  • 收集所有的 href 值,然后使用它们。 links=[link.get_attribute('href') for link in driver.find_elements_by_tag_name('a')]。然后循环使用链接。您可能会转到另一个页面,并且您的元素链接将变得陈旧。

标签: python python-3.x selenium selenium-webdriver


【解决方案1】:

StaleElementReferenceException 表示调用该函数的 DOM 已更改。由于您对链接进行了某些操作,因此您无法遍历其余部分。我的建议是将它们存储在一个列表中:

links.append(href)

最后你会遍历这个列表。这是因为您没有与元素交互,也没有收到错误消息。

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 2022-09-29
    • 2023-01-19
    • 1970-01-01
    • 2021-04-19
    • 2011-06-18
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多