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

如何避免与Selenium StaleElementReferenceException(Python)不一致的行为?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我正在进行一项自动化工作,基本上可以打开YouTube,播放特定的视频,然后打开“书呆子统计”对话框并从中获取信息。这是昨天的工作。今天,我添加了几行代码将视频设置为1080p,然后进入全屏,但现在它无法工作 以下线路工程: driver.find_element_by_id("movie_player").click() 当此集合失败时,抛出一个StaleElementReferenceException: element = driver.find_element_by_id("movie

我正在进行一项自动化工作,基本上可以打开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
块中,有没有抛出一些等待。不知何故,在查找和设置元素以及执行上下文单击操作之间的很短时间内,元素就过时了

有没有办法绕过这件事

编辑:我会继续检查,看看是否有人知道更好的方法来做这件事,但现在,为了方便起见,我只是用pymouse来控制鼠标并右键单击。我怀疑如果你将鼠标移到按钮上,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()

在这里必须使用动作吗?您可以使用
驱动程序。通过\u id(“电影播放器”)查找\u元素。\u。改为单击()
?我确实使用了它(它工作正常)。但这里需要的是上下文单击(右键单击),如果我读得正确,WebElement不支持它,所以我想我需要使用一个操作来实现这一点。我尝试了一下。没有快乐。它在第一行找到元素,但一旦它尝试执行第二行,即move_to_element(),我就会得到StaleElementReferenceException。