我正在研究一些自动化,基本上可以打开 YouTube,播放特定视频,然后打开“ Nerd 统计”对话框并从中获取信息。这是昨天的工作。今天,我加了几行将视频设置为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 来实际控制鼠标并右键单击来实现它.
最佳答案
如果您将鼠标悬停在按钮上,我怀疑 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()
关于python - 如何避免与 Selenium StaleElementReferenceException (Python) 不一致的行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33684283/