【问题标题】:Python with Selenium "element is not attached to the page document"带有 Selenium 的 Python “元素未附加到页面文档”
【发布时间】:2016-03-15 13:47:14
【问题描述】:

我有一个 python 函数,它应该点击产品的所有选项:

submit_button = driver.find_element_by_id('quantityactionbox')

elementList = submit_button.find_elements_by_tag_name("option")

for x in elementList:
    x.click()

单击 2 个元素后,出现此错误:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

你能告诉我为什么会出现这个错误吗?我该怎么做才能成功通过所有元素?

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    你在The Element is not Attached to the DOM上有解释和解决方案:

    用于在 Web 应用程序中模拟选项卡式 UI 的常用技术是 为每个选项卡准备 DIV,但一次只附加一个,存储 休息在变量中。在这种情况下,您的代码完全有可能 可能对不再附加到 DOM(也就是说,它的祖先是 “document.documentElement”)。

    如果 WebDriver 抛出一个陈旧的元素 在这种情况下例外,即使元素仍然存在, 参考丢失。您应该丢弃您持有的当前参考 并替换它,可能通过再次定位元素 附加到 DOM。

    【讨论】:

      【解决方案2】:

      克服许多此类错误的简单方法是添加某种延迟:

      import time
      
      time.sleep(1) 
      

      触发事件后的 DOM 操作通常需要一些时间,因此您并不会真正损失那么多性能。

      【讨论】:

        【解决方案3】:

        在我的情况下,这是因为页面已更改并且元素不再存在,但我的脚本试图调用它。这并不明显,因为该页面确实具有基本相同的元素,但它已被重新加载,因此不是完全相同的元素,并且在当前页面文档中不可用。页面重新加载后,我不得不重新定义元素。

        【讨论】:

        • 也例如如果向当前页面添加了某些内容,例如错误消息或其他内容,基本上该页面正在向 html 树添加一个新元素,因此该元素的路径会丢失selenium,所以你必须在与元素交互后再次找到元素
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-16
        • 1970-01-01
        • 2019-04-27
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多