我有一个 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
您能否告诉我为什么会出现此错误以及我该怎么做才能成功完成所有元素?
克服许多此类错误的简单方法就是添加某种延迟:
import time
time.sleep(1)
事件触发后的 DOM 操作通常需要一些时间,因此您并不会真正损失太多性能。
您有关于 The Element is not Attached to the DOM:
的解释和解决方案在 Web 应用程序中模拟选项卡式 UI 的常用技术是 为每个选项卡准备 DIV,但一次只附加一个,存储 休息在变量中。在这种情况下,您的代码完全有可能 可能引用了不再附加到的元素 DOM(即,它的祖先是 “文档.documentElement”)。
如果 WebDriver 抛出一个过时的元素 在这种情况下例外,即使该元素仍然存在, 参考丢失。您应该放弃当前持有的参考 并替换它,可能是通过再次定位该元素 附加到 DOM。
就我而言,这是因为页面已更改并且该元素不再存在,但我的脚本试图调用它。这并不明显,因为该页面确实具有本质上相同的元素,但它已被重新加载,因此不是完全相同的元素,并且在当前页面文档中不可用。页面重新加载后我必须重新定义元素。
就我而言,chrome 已更新,我使用的是较旧的“chrome driver.exe”。请检查版本信息。