如何避免Selenium StaleElementReferenceException(Python)的不一致行为?

时间:2015-11-13 01:05:12

标签: python selenium selenium-webdriver

我正在进行一些基本上打开YouTube的自动化,播放特定视频,然后打开“Stats for Nerds”对话框并从中获取信息。这在昨天工作。今天,我添加了一些行来将视频设置为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实际控制它来克服它鼠标右键单击。

1 个答案:

答案 0 :(得分:0)

如果您将鼠标悬停在按钮上,我怀疑 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()