【问题标题】:How can I avoid inconsistent behavior with Selenium StaleElementReferenceException (Python)?如何避免与 Selenium StaleElementReferenceException (Python) 不一致的行为?
【发布时间】:2016-02-14 12:50:51
【问题描述】:

我正在进行一些自动化操作,基本上可以打开 YouTube,播放特定视频,然后打开“书呆子统计”对话框并从中获取信息。这是昨天的工作。今天加了行,把视频设置为1080p,然后全屏,现在不行了。

以下行有效:

driver.find_element_by_id("movie_player").click()

当这个集合失败时,抛出一个StaleElementReferenceException:

element = driver.find_element_by_id("movie_player")
actions.move_to_element(element)
actions.context_click(element)
actions.perform()

我所做的一切都无法避免这种情况。我尝试将它放在try 块中,有或没有一些等待。不知何故,在查找和设置元素和执行 context_click 操作之间的很短的时间内,该元素会变得陈旧。

有没有办法解决这个问题?

编辑:我会继续查看是否有人知道更好的方法来做到这一点,但现在,为了方便起见,我只是通过使用 pymouse 来实际控制它鼠标右键单击。

【问题讨论】:

  • 这里必须使用操作吗?你能用driver.find_element_by_id("movie_player").click()代替吗?
  • 我确实使用过它(并且它工作正常)。但是这里需要的是 context_click(右键单击),如果我没看错的话,WebElement 不支持它,所以我认为我需要使用一个动作来这样做。跨度>

标签: python selenium selenium-webdriver


【解决方案1】:

如果您将鼠标悬停在按钮上,我怀疑 DOM 会发生变化。要解决此问题,请“重新查找”元素:

element = driver.find_element_by_id("movie_player")
actions.move_to_element(element).perform()

element = driver.find_element_by_id("movie_player")
actions.context_click(element).perform()

【讨论】:

  • 我试了一下。没有喜悦。它在第一行找到元素,但是一旦它尝试执行第二行 move_to_element(),我就会得到 StaleElementReferenceException。
猜你喜欢
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2021-01-02
  • 2019-04-02
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多