如何避免 Selenium 中的 StaleElementReferenceException - Python

2023-11-23

我陷入了编写 Python Selenium 脚本的困境,似乎无法令人满意地解决我收到的这个 StaleElementReferenceException 。

我已加载页面并单击一个按钮,该按钮将打开一个表单,允许用户向订单添加新的信用卡。此时,我执行 WebDriverWait 来暂停脚本,直到该表单上的“保存”按钮变得可见。此时,重新创建页面对象,因为它已更改,我的目的是填充字段并保存卡片。

问题是刷新页面对象后,脚本失败并出现 StaleElementReferenceException。我的理解是,WebDriverWait 将暂停执行,为页面提供时间来加载所有需要加载的元素,但这似乎并没有发生。相反,页面对象刷新中的某些内容已过时并导致错误(每次创建对象的不同部分)。

如果我只是取消注释“time.sleep(2)”行,那么这个脚本就可以正常运行并且会通过。所以我知道我只需要在刷新对象之前给页面时间来正确重新加载。 WebDriverWait 似乎并没有对我有效地做到这一点。

有没有更正确的方法可以在没有睡眠命令的情况下执行此操作?

checkout = CheckoutProcess(self.driver)

# Add Credit Card
checkout.add_credit_card()

# Wait for form to display
WebDriverWait(self.driver,30).until(
    expected_conditions.presence_of_element_located((By.CLASS_NAME, 'total')))

# time.sleep(2)

# Refresh the page object so form can be filled in
checkout = CheckoutProcess(self.driver)  # Script Fails Here
checkout.populate_credit_card_data(
    credit_card_name, credit_card_number,
    credit_card_expiration_date, credit_card_cvc)
checkout.click_credit_card_save_button()

当您正在交互的元素被销毁然后重新创建时,会引发 StaleElementReferenceException。如今,大多数复杂的网页都会在用户与其交互时动态移动内容,这需要销毁并重新创建 DOM 中的元素。

尝试做

wait.until(ExpectedConditions.stalenessOf(whatever element));

or

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("whatever elemnt")))

希望它能帮助你

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免 Selenium 中的 StaleElementReferenceException - Python 的相关文章

  • Matplotlib 标准化颜色条 (Python)

    我正在尝试使用 matplotlib 当然还有 numpy 绘制轮廓图 它有效 它绘制了它应该绘制的内容 但不幸的是我无法设置颜色条范围 问题是我有很多图 并且需要所有图都具有相同的颜色条 相同的最小值和最大值 相同的颜色 我复制并粘贴了在
  • 打印 scrapy 请求的“响应”

    我正在尝试学习 scrapy 在遵循教程的同时 我正在尝试进行细微的调整 我想简单地从请求中获取响应内容 然后我会将响应传递到教程代码中 但我无法发出请求并获取响应内容 建议就好 from scrapy http import Respon
  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 在 Python 中使用 XPath 和 LXML

    我有一个 python 脚本 用于解析 XML 并将某些感兴趣的元素导出到 csv 文件中 我现在尝试更改脚本以允许根据条件过滤 XML 文件 等效的 XPath 查询将是 DC Events Confirmation contains T
  • 如何用 python 和 sympy 解决多元不等式?

    我对使用 python 和 Sympy 还很陌生 并且遇到了使用 sympy 解决多元不等式的问题 假设我的文件中有很多函数 如下所示 cst sqrt x 2 cst exp sqrt cst x 1 4 log log sqrt cst
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 如何将条目中的部分文本加粗并更改其背景颜色?

    我正在创建一个基于 Tkinter 的 GUI 它有一个 Entry 小部件 我想将其文本的一部分加粗并更改其背景颜色 但我不知道我该怎么做 如果我使用文本小部件 我可以只使用标签 但看起来它们不能与条目小部件一起使用 此代码使用文本小部件
  • 无法包含外部 pandas 文档 Pycharm v--2018.1.2

    我无法包含外部 pandas 文档Pycharm v 2018 1 2 例如 numpy gt http docs scipy org doc numpy reference generated module name element na
  • CSS 和 XPath 选择器有什么区别?就跨浏览器测试的性能而言,哪个更好?

    我正在与硒网络驱动程序 https en wikipedia org wiki Selenium software Selenium WebDriver2 25 0 在多语言 Web 应用程序上 主要测试页面内容 针对不同语言 如阿拉伯语
  • Python:当前目录是否自动包含在路径中?

    Python 3 4 通过阅读其他一些 SO 问题 似乎如果moduleName py文件位于当前目录之外 如果要导入它 必须将其添加到路径中sys path insert 0 path to application app folder
  • 将 subprocess.Popen 的输出通过管道传输到文件

    我需要启动一些长时间运行的进程subprocess Popen 并希望拥有stdout and stderr从每个自动管道到单独的日志文件 每个进程将同时运行几分钟 我想要两个日志文件 stdout and stderr 每个进程当进程运行
  • Python:随时接受用户输入

    我正在创建一个可以做很多事情的单元 其中之一是计算机器的周期 虽然我将把它转移到梯形逻辑 CoDeSys 但我首先将我的想法放入 Python 中 我将进行计数 只需一个简单的操作 counter 1 print counter 跟踪我处于
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 使用循环将对象添加到列表(python)

    我正在尝试使用 while 循环将对象添加到列表中 基本上这就是我想做的 class x pass choice raw input pick what you want to do while choice 0 if choice 1 E
  • 如何逐像素绘制正方形(Python,PIL)

    在空白画布上 我想使用 Pillow 逐像素绘制一个正方形 我尝试使用 img putpixel 30 60 155 155 55 绘制一个像素 但它没有执行任何操作 from PIL import Image def newImg img
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • Selenium Web 驱动程序如何知道新窗口何时打开,然后恢复执行

    我在使用 Selenium Web 驱动程序自动化 Web 应用程序时遇到问题 该网页有一个按钮 单击该按钮会打开一个新窗口 当我使用以下代码时 它会抛出OpenQA Selenium NoSuchWindowException No wi
  • Plotly:如何避免巨大的 html 文件大小

    我有一个 3D 装箱模型 它使用绘图来绘制输出图 我注意到 绘制了 600 个项目 生成 html 文件需要很长时间 文件大小为 89M 这太疯狂了 我怀疑可能存在一些巨大的重复 或者是由单个项目的 add trace 方法引起的 阴谋 为
  • 是否可以强制浮点数的指数或有效数匹配另一个浮点数(Python)?

    这是我前几天试图解决的一个有趣的问题 是否可以强制一个的有效数或指数float与另一个人一样float在Python中 出现这个问题是因为我试图重新调整一些数据 以便最小值和最大值与另一个数据集匹配 然而 我重新调整后的数据略有偏差 大约小
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们

随机推荐

  • PHP PDO简单插入或更新函数

    在尝试创建一个简单的 PHP PDO 更新函数 如果未找到该字段将插入它 时 我创建了这个小片段 function updateorcreate table name value global sodb pro sodb gt prepar
  • 在VB.NET中用“”分割字符串

    假设这是我的字符串 1 2 3 我想用 空格 分割字符串并每次显示字符串的一部分 这将满足您的需要 Dim str As String 1 2 3 Dim strarr As String strarr str Split c For Ea
  • SQL 连接表值函数与表,其中表字段是函数输入

    我有一个名为 fn SplitCommaSep 的表值函数 它用逗号分隔文本字段 从 a b c 到 3 行 a b c 如何将其连接到表中 将表列作为输入 为此 假设表 MyTable 有 2 列 即 Id 和 TextWithComma
  • 如果表的长度不同,如何对多个表中的列值求和?

    好吧 这应该是一个简单的问题 但我正在寻找一种尽可能快的解决方案 假设我有 3 个表 表的数量会更大 tab1 lt table c 1 1 1 2 2 3 3 3 tab2 lt table c 1 1 4 4 4 tab3 lt tab
  • WPF 位图性能

    我试图了解为什么我的图像不活泼 因此我构建了一个示例来测试 WPF 性能 我使用计时器来计算 显示图像 事件处理程序执行的时间 并使用秒表来测量图像出现在屏幕上所需的时间 底线 显示 100 1600 2500 和 3600 个图像时 WP
  • 循环摩卡测试

    我正在尝试使用摩卡中的数据提供程序来编写更少的代码 var should require should var assert require assert var request require supertest var mongoose
  • 使用 LocationClient 定期获取更新的最节省电池效率的方法是什么?

    我正在考虑设置两个单独的警报 每小时收集用户的位置数据 一个每 59 分钟发出一次以 连接 客户端 另一个警报用于实际获取位置 然后断开客户端连接 就电池寿命而言 如果获取用户位置将成为应用程序的主要消耗 我还应该考虑做什么 或者 是否有不
  • 如何编写异步LINQ查询?

    当我读了一堆LINQ相关的东西后 我突然意识到没有文章介绍如何编写异步LINQ查询 假设我们使用 LINQ to SQL 下面的语句很清楚 但是 如果 SQL 数据库响应缓慢 那么使用该代码块的线程就会受到阻碍 var result fro
  • log4j ConversionPattern 时间戳(微秒)

    我想在使用 log4j 生成的日志文件的每个条目的时间戳中添加微秒 这可能吗 我查过官方文档 但没有提到毫秒以下的单位 现在我有一个如下所示的转换模式 d dd MM yyyy HH mm ss SSS 5p t m n 在日期转换模式中
  • 您建议将哪个数据库与 C# (.NET) 应用程序一起使用?

    我正在制定一个小项目计划 当我需要决定使用什么本地数据库系统时 输入数据将存储在网络服务器上 托管 MySQL DB 这个想法是建立一个流程来下载所有必要的数据 例如在午夜 并处理它们 然而 会有很多输入和处理阶段 所以我需要使用某种本地数
  • 处理器有哪些优化代码的技巧?

    我正在寻找诸如代码重新排序之类的东西 这些东西甚至可能在多处理器的情况下破坏代码 最重要的一个是内存访问重新排序 如果没有内存栅栏或序列化指令 处理器可以自由地重新排序内存访问 某些处理器架构对其可以重新排序的数量有限制 Alpha 因最弱
  • 如何使用 lambda 初始化映射?

    我想在单个语句中声明一个完全填充的映射字段 可能包含多个嵌套语句 如下所示 private static final Map
  • Ruby 字符串连接问题

    这有效 irb main 001 0 gt name Rohit Sharma gt Rohit Sharma 但这并不 irb main 001 0 gt fname Rohit gt Rohit irb main 002 0 gt ln
  • 根据眼睛图像进行注视估计

    到目前为止我已经能够准确地检测瞳孔和眼角 您可以在此处看到我在回答自己的问题时上传的一些快照 执行稳定的眼角检测 这是我到目前为止所做的 我通过查看 TLCP TRCP 和 BLCP 来校准用户的视线 在哪里 CP calibration
  • 将大数据加载到 TensorFlow 2.0 中,而不将其加载到 RAM 上

    我已经处理并保存了大量视频和音频文件数据集 大约 8 到 9 GB 的数据 数据保存为 2 个 numpy 数组 每个数组对应一种模态 文件的形状为 number of examples maximum time length featur
  • 带有 ViewPager2 的 BottomSheetBehavior 无法通过嵌套的 RecyclerView 滚动向下滚动

    我有一个类似的观点BottomSheet行为这个视图有ViewPager2里面 每个ViewPager2的页面都是一个垂直的RecyclerView 问题是 当当前垂直 RecyclerView ViewPager 的页面 无法再垂直滚动时
  • 在 swift4.1 中将 Any 转换为 Float 总是失败

    在以前的版本中 要从 a 获取浮点值 String Any 字典 我可以用let float dict somekey as Float 但是在swift4 1中 不起作用 似乎是这样的类型dict somekey 已被隐含地推断为Doub
  • 如何从 SqlDataReader 解析 Nullable

    DateTime TryParse 方法采用 DateTime 作为参数 而不是 DateTime 现在我有以下代码 if DateTime TryParse reader Placed ToString out placed throw
  • 在 Windows Kafka 上删除主题时出现 AccessDeniedException

    我刚刚在我的 Windows 机器上安装了 Kafka 来自 Confluence Platform 我启动了 Zookeeper 和 Kafka 并创建主题 生产和消费它们的工作 然而 一旦我删除一个主题 Kafka 就会崩溃 如下所示
  • 如何避免 Selenium 中的 StaleElementReferenceException - Python

    我陷入了编写 Python Selenium 脚本的困境 似乎无法令人满意地解决我收到的这个 StaleElementReferenceException 我已加载页面并单击一个按钮 该按钮将打开一个表单 允许用户向订单添加新的信用卡 此时