在Python中添加Selenium Web Driver等待

news2025/1/15 16:54:57

本文将介绍在Python中在Selenium Web驱动程序中添加等待的示例。


Python Selenium Web 驱动程序等待

大多数 Web 应用程序都使用 AJAX 技术。 因此,网页上存在的不同元素需要不同的时间间隔才能完全上传,因为硒在网页上存在之前无法找到任何文本。

我们可能会发现某些应用程序的网页在上传之前并不存在特定文本。 这会在测试应用程序时产生错误。

这个问题可以通过等待来解决。 这些等待在网页上搜索元素或任何其他操作时提供了灵活性。

Selenium Web 驱动程序提供两种类型的等待。 第一个是隐式等待,第二个是显式等待。

本文讨论了这两种等待类型的详细信息。


Selenium Web 驱动程序中的隐式等待

由于网速慢或网站响应慢,有时我们需要等待几秒钟才能获得所有结果。 对于这种情况,隐式等待效果最好。

隐式等待告诉 Web 驱动程序在特定时间轮询 DOM,同时查找元素,以便在我们的 Web 驱动程序获取元素时使所有元素可用。 该进程的默认设置为 0。

一旦我们设置了隐式等待,它将持续到 Web 驱动程序对象的生命周期。

只要我们运行相同的网络驱动程序而不关闭或重新启动并更改等待值,它就会是相同的量。

让我们来看一个示例,我们将访问一个网站并等待 10 秒钟,然后单击“关于我们”页面链接,如下所示。

示例代码:

# python
from selenium import webdriver

ChromeDriver = webdriver.Chrome()

ChromeDriver.implicitly_wait(10)

ChromeDriver.get("https://www.inventicosolutions.com/")

getElemByLink = ChromeDriver.find_element_by_link_text("About Us")

getElemByLink.click()

输出:

Python 中的 Selenium Web 驱动程序等待示例

从上面的示例中可以看到,加载页面后,它等待了整整 10 秒,然后才转到“关于我们”页面。


Selenium Web 驱动程序中的显式等待

显式等待是一种定义为等待特定条件发生并在代码中进一步处理的代码类型。 显式等待的极端情况是 time.sleep()。

这将等待的条件设置为精确的时间段。

一些适当的方法可以帮助我们编写显式的代码。 显式等待是使用 Web 驱动程序等待类并与 Expected_conditions 相结合来实现的。

如下所示,让我们看一个示例,其中我们将使用显式等待而不是隐式等待。

示例代码:

# python
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ExpectedCond

chromeDriver = webdriver.Chrome()

chromeDriver.get("https://inventicosolutions.com")

getElembyLinkText = WebDriverWait(chromeDriver, 10).until(ExpectedCond.presence_of_element_located((By.LINK_TEXT, "About Us")))

getElembyLinkText.click()

输出:

Python 中的 Selenium Web 驱动程序显式等待示例

上述代码的超时值为 10 秒。 Web 驱动程序将等待 10 秒,然后抛出超时异常。

应用程序的网页地址(URL)和文本元素可以根据要求用给定的代码编写。

Web 驱动程序等待(显式等待中使用的工具之一)具有这种内置质量,每 500 毫秒检查一次预期条件,直到成功找到文本。

Python 中等待的预期条件

这些条件在自动化 Web 浏览器时最常用,并且在 Web 驱动程序中预定义。 这些条件包括:

  • title_is
  • title_contains
  • presence_of_element_located
  • visibility_of_element_located
  • visibility_of
  • presence_of_all_elements_located
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located
  • element_to_be_clickable
  • staleness_of
  • element_to_be_selected
  • element_located_to_be_selected
  • element_selection_state_to_be
  • element_located_selection_state_to_be
  • alert_is_present

我们可以通过导入以下库将这些预期条件包含在我们的代码中。

# python
from selenium.webdriver.support
import expected_conditions as ExpectedCond

Python 中的自定义等待条件

当上述方法均不能满足用户的要求时,可以创建自定义等待条件。 自定义条件是使用带有 call() 方法的类创建的。

如下所示,让我们看一个示例,在该示例中我们将创建一个自定义条件并尝试让我们的程序等待几秒钟。

示例代码:

# python
class ElementWithClass(object):
    def __init__(self, location, className):
        self.location = location

        self.className = className

    def __call__(self, ChromeDriver):
        findElem = ChromeDriver.find_element(*self.location)

        if self.className in findElem.get_attribute("class"):
            return findElem
        else:
            return False

        wait = WebDriverWait(ChromeDriver, 10)
        findElem = wait.until(element_has_css_class((By.ID, 'myId'), "myClass"))

如果找到该元素,此代码将为用户提供 true,否则返回 false。

因此,我们通过一些示例讨论了在 Python 中添加等待的不同方法。 我们希望您喜欢这个主题并从中学到一些东西。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

康耐视深度学习ViDi-Workspace菜单介绍与Workspace侧拉菜单

Workspace菜单介绍 New ------- 新建一个程序,点击后会呼出如下窗口,输入需要建立的程序的名字。然后点击OK按钮,就会建立一个新的程序。 Save --------- 保存当前的程序 Close -------- 关闭当前的程序 Delete ------ 删除当前的程序 Save …

数字媒体技术基础之:ICC 配置文件

ICC 配置文件(也称为 ICC 色彩配置文件或 ICC 色彩描述文件)是由国际色彩联盟(International Color Consortium, ICC)制定的一种标准文件格式,用于在不同的设备和软件之间保持颜色的一致性。 ICC 配置文件包含有关设备…

“凸函数”是什么?

凸函数(英文:Convex function)是指函数图形上,任意两点连成的线段,皆位于图形的上方,如单变数的二次函数和指数函数。二阶可导的一元函数为凸,当且仅当其定义域为凸集,且函数的二阶导…

1-Docker虚拟化平台技术概述及简介

1.虚拟化技术概述及简介 通俗的说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件的容量,简化软件的重新配置过程。允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独…

JavaScript设计模式之责任链模式

适用场景:一个完整的流程,中间分成多个环节,各个环节之间存在一定的顺序关系,同时中间的环节的个数不一定,可能添加环节,也可能减少环节,只要保证顺序关系就可以。 如下图: ES5写法…

C++基础——对于C语言缺点的补充(1)

目录 1.命名空间: 1.1 为什么要引入命名空间: 1.2 命名空间的作用: 1.3 如何访问命名空间内的变量: 1.4 命名空间的嵌套: 1.5 不同文件下同名命名空间的合并: 1.6 命名空间的展开: 2. C…

【计算机网络笔记】TCP连接管理(图解三次握手和四次挥手)

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

SpringBoot开发组件总结

大家好,今天学习了SpringBoot中间件开发,在学习后总结记录下。 在开发的过程中,把一些公共的非业务的代码提炼出来,做成一个公用的组件,减少开发成本和风险,今天学习的是一个白名单控制组件,记…

PHP之getimagesize获取网络图片尺寸、类型信息

[0]:图像宽度(以像素为单位)[1]:图像高度(以像素为单位)[2]:图像类型的标识符[3]:包含字符串的属性,用于布局img元素(例如:width"xxx" …

CSS中calc(80vw - 100px)为什么不加空格会不生效?

问题起因 今天再使用calc时发现无法生效,我的写法是: width: calc(100%-100px);页面无效果,加空格后就发现有效果了: width: calc(100% - 100px);有亿点疑惑,这是为什么? calc是什么? css3的…

基于51单片机土壤湿度检测及自动浇花系统仿真(带时间显示)

wx供重浩:创享日记 对话框发送:单片机浇花 获取完整源码源文件仿真源文件原理图源文件论文报告等 单片机土壤湿度检测及自动浇花系统仿真(带时间显示) 具体功能: (1)液晶第一行显示实际湿度&am…

成员变量为动态数据时不可轻易使用

问题描述 业务验收阶段,遇到了一个由于成员变量导致的线程问题 有一个kafka切面,用来处理某些功能在调用前后的发送消息,资产类型type是成员变量定义; 资产1类型推送消息是以zichan1为节点;资产2类型推送消息是以zi…

python算法例6 快速幂

1. 问题描述 计算,其中a、b和n都是32位的非负整数。 2. 问题示例 例如:。 3.代码实现 计算a的n次幂对b取余,可以使用快速幂算法。这个算法通过减少乘法和取余操作的次数来提高效率。 def pow_mod(a, n, b):result 1while n > 0:if …

园区网真实详细配置大全案例

实现要求: 1、只允许行政部电脑对全网telnet管理 2、所有dhcp都在核心 3、wifi用户只能上外网,不能访问局域网其它电脑 4、所有接入交换机上bpdu保护 5、只允许vlan 10-40上网 5、所有接入交换机开dhcp snoop 6、所有的交换机指定核心交换机为ntp时间服务…

【Unity数据交互】游戏中常用到的Json序列化

ˊˊ 👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏&#xff1…

独创改进 | RT-DETR 引入双向级联特征融合结构 RepBi-PAN | 附手绘结构图原图

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 YOLOv6贡献RepBi-…

面向网络安全-Python语言

目录 1、变量 2、字符串 3、列表 4、字典 5、网络 6、条件选择语句 7、异常处理 1、变量 变量是指储存在某个内存地址上的数据 主要有:整型数、实数、布尔值、字符串、列表、元组、字典 这些数据在声明后,解释器就会自动确定每个变量的类型&…

【云原生 | Docker】Linux 定时自动化备份Mysql数据到本地 Windows 最佳实践,确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

C#,数值计算——偏微分方程,Mgfas的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Mgfas { public int n { get; set; } public int ng { get; set; } public double[,] uj; public double[,] uj1 { get; …

云安全-攻防视角下如何看待堡垒机

0x00 堡垒机简介 堡垒机是种网络安全设备,用于保护和管理企业内部网络与外部网络之间的访问。它作为一种中间节点,提供安全的访问控制和审计功能,用于保护内部网络免受未经授权的访问和攻击。堡垒机通常被用作跳板服务器,即堡垒机…