【问题标题】:Cannot click on stale element using Selenium in Python [duplicate]无法在 Python 中使用 Selenium 点击过时的元素 [重复]
【发布时间】:2019-03-02 00:01:50
【问题描述】:

我想在这个问题的开头说,我已经查看了有关此主题的所有其他问题并尝试实施解决方案,但仍然没有成功。 我正在尝试点击 Quora 推荐屏幕中的加号按钮:

这是我的代码:

def recommendations():
  time.sleep(10)
  requests = WebDriverWait(driver, 10).until(unhidden_elements_located((By.TAG_NAME, 'svg')))

  for i in range(12):
      try:
          ActionChains(driver).click(requests[i]).perform()

      except selexcep.StaleElementReferenceException as e:
          print(e)

等待页面加载后,它会获取所有加号元素的列表,然后通过并尝试单击它们。我很确定它仍然可以获取正确的元素,因为此代码曾经可以正常工作,直到它随机开始收到此错误消息:

Message: stale element reference: element is not attached to the page document

我现在完全不知道如何解决这个问题。

【问题讨论】:

  • 单击 dom 更新/重新加载的元素之一后是否有可能?如果是这样,这可能是导致问题的原因。
  • 我不确定你的意思。我在这方面不是很精通,但是如果我已经点击了我想点击的内容,为什么在那之后更新 dom 会很重要?
  • 当点击某个元素时,可能会重新加载 html 或更改部分内容。我想知道是否是这种情况,这就是导致陈旧异常被抛出的原因。单击某个元素后,您可能必须重新查找元素。您可以根据找到的集合的原始大小尝试 for 循环,然后重新找到类似 Pritam 在他们的答案中显示的内容。
  • 我想我知道问题所在了。我试图点击的元素在一个弹出窗口中,当我找到这些元素时,我还会从它后面的主窗口中选择一些具有相同标签的元素。

标签: python selenium staleelementreferenceexception


【解决方案1】:

页面加载后似乎元素未正确加载。像下面这样定义你的元素。

search_input = lambda: driver.find_element_by_name('q')

这是因为调用“search_input()”会重新评估 lambda 语句并再次对元素进行查找。这通过每次获取对 WebElement 的新引用来防止过时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多