Python + Selenium 报错 StaleElementReferenceException 解决方法

本文主要是介绍Python + Selenium 报错 StaleElementReferenceException 解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

>>StaleElementReferenceException

  • 当引用的元素对象 ”过时“ 时抛出(页面刷新,窗口(标签页)切换,网址切换,当前页面下的”下一集“或”下一页“等操作都有可能引发对象过时错误)

  • ”过时“意味着之前你通过css ,xpath等方法定位的元素,暂未出现在当前DOM上,重新定位元素是解决方案之一

  • 原文解释:

Possible causes of StaleElementReferenceException include, but not
limited to:
You are no longer on the same page, or the page may have
refreshed since the element was located. The element may have been
removed and re-added to the screen, since it was located. Such as an
element being relocated. This can happen typically with a javascript
framework when values are updated and the node is rebuilt. Element may
have been inside an iframe or another context which was refreshed.

>>问题描述

  • 我在做一个模拟登陆+自动播放视频的脚本时,遇到了这个错误。具体原因就是一集进度结束后,点击播放下一集,页面没有跳转,没有出现新的窗口,网页链接没有改变,但页面元素重定向。导致find 方法 或者click 交互等操作报错。

>>解决方案

1. 引入等待步骤
  • 不管是显式、隐式、全局等待还是其他间隔性操作,达到元素对象刷新完毕后再交互的目的即可。
  • -举个栗子:
# 调出隐藏元素
donSee = WebDriverWait(self.api, 5, ).until(EC.presence_of_element_located((By.XPATH, "//div[@class='videoArea']" )))
onPear = self.api.find_element_by_xpath("//span[@id='lessonOrder']")
self.action.move_to_element(onPear).pause(1). \move_to_element(donSee).pause(0.5)# 倍速盒-->调整倍速
box = WebDriverWait(self.api, 6, ).until(EC.presence_of_element_located((By.XPATH, "//div[@class='speedBox']")))
rate = WebDriverWait(self.api, 6, ).until(EC.presence_of_element_located((By.XPATH, "//div[@class='speedBox']/div/div[@rate='1.5']")))
self.action.move_to_element(box).click().perform()
self.action.double_click(rate).perform()
2.页面元素重定向。
  • 如果使用Action模拟键鼠则需要释放当前元素,重新定位元素。
  • 举个例子:
def MediaPanel(self) :"""一个高度封装的自动脚本的模块:return: """try:self.MonitorProgress()  # 监听进度nex = self.api.find_element_by_xpath("//div[@class='controlsBar']//div[@id='nextBtn']")# 本集播放结束,预备下一集工作self.action.move_to_element(onPear).pause(1). \move_to_element(donSee).pause(0.5).\click(nex).perform()#模拟操作呼出隐藏面板,点击“下一集”按钮except StaleElementReferenceException:#当元素”过时“,执行以下操作self.action.reset_actions()# 关键语法-更新dom树-元素重定向finally:self.AudioPanel()#递归调用;重新定位元素
>>其他
>>Selenium 中其他类型错误
  • Selenium常见报错汇总(转译自官方API文档)

这篇关于Python + Selenium 报错 StaleElementReferenceException 解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920427

相关文章

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL