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

标签 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 block 中,有和没有一些等待。不知何故,元素在查找和设置元素以及执行 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/

相关文章:

python - 如何将 elif 用于多个 bool 选项

Python:通过 href 查找元素

ruby-on-rails - 使用 RSPEC 进行测试时突然莫名其妙的事件记录连接超时

java - 捕获网络驱动程序断开连接问题并处理额外的 Activity

python - 无法通过 Azure Databricks 中的 PyPi 安装 python 包

python - 处理语料库以实现 word2vec

python - Windows 上的 Bigquery 命令行工具

python - 如果输入类型 ="number",Selenium send_keys 不起作用

python - selenium.common.exceptions.SessionNotCreatedException : Message: Unable to find a matching set of capabilities with GeckoDriver, Selenium 和 Firefox

javascript - 让 WebDriver 使用 Protractor 和 cucumber 调整大小