selenium初始学习(2)--selenium 等待

selenium 等待

为什么需要写等待呢?

因为我们的元素定位 可能因为一些原因报错
原因: 元素定位错误 动态元素 元素没有加载完成 打开新窗口/标签等
所以我们等待 就是解决第三个问题的

方式一 强制等待(time.sleep):

暂停运行指定的时间。这种方式的优点是简单易用,但缺点是可能会浪费无谓的等待时间,另外,如果等待时间设定不当,可能会出现未等待到元素就进行下一步操作导致失败的情况。

time.sleep(10)

方式二 隐式等待(implicitly_wait):

告知 WebDriver 在查找元素时,如果立即未找到则等待一段时间,直到元素出现为止。缺点是如果网页中有多个元素需要等待,则每个元素都要进行等待,可能会增加测试运行的时间。

implicitly_wait(time) 默认参数的单位为秒

driver.implicitly_wait(10)

首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。

方式三 显式等待(WebDriverWait & Expected Conditions):

这是一种更为智能的等待方式,它可以部分解决强制等待和隐式等待的缺点。它允许我们指定要等待的条件和最大等待时间,当条件满足时立即返回,否则在达到最大等待时间时抛出异常。因此,它不会浪费无谓的时间。虽然它比隐式等待和强制等待更为灵活,但同样也更为复杂。

from selenium.webdriver.support import expected_conditions
WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.ID, "su"))).click()

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。

WebDriverWait()一般由until()或until_not()方法配合使用
until(method, message=‘’) 当某元素出现或什么条件成立则继续执行。指定时间找到则返回值,没有找到报错
until_not(method, message=‘’) 当某元素消失或什么条件不成立则继续执行。指定时间内元素消失返回True,如果还在则报错

WebDriverWait使用

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By# 启动 webdriver,假设为 driver
driver = webdriver.Firefox()# 访问页面
driver.get("http://somedomain/url_that_delays_loading")# 使用 WebDriverWait,设置最大等待时间以及轮询时间(默认 0.5 秒)
wait = WebDriverWait(driver, 10)# 使用 until 方法,其中 expected_conditions 已经有很多内置的条件可以使用
element = wait.until(EC.presence_of_element_located((By.ID, 'someid')))# 接下来就可以对获取到的 element 进行操作了

WebDriverWait 和 Expected Conditions 是 Selenium WebDriver 中一种同步的方式,也称为显式等待。它用于解决一些在页面完全加载完成之前不可交互的元素的问题。这种方式能够等待页面元素在一定时间(秒)内变为可交互状态,如果超出了设置的时间,还没有找到元素就会返回异常。

一些常用的 expected_conditions 条件如下:
presence_of_element_located:某个元素已经出现在 DOM 里,注意这并不意味着该元素是可见的。
visibility_of_element_located:元素可见,(最少一个像素可见)。
element_to_be_clickable:元素可以被点击,通常用在确认按钮可以被点击后再执行点击事件。
注意,如果到了最大等待时间,条件还未满足,WebDriverWait 将会抛出 TimeoutException异常,可以根据需要进行捕获并处理。

总结

所以,要选择哪种方式取决于你具体的需求和环境。推荐在可能的情况下尽量使用显式等待,因为它提供了最大等待时间以及等待某一特定条件成立。同时,显式等待也是动态的,它会在条件满足后立即返回,最大程度地减少了无谓的等待时间。

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

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

相关文章

论文精读--GPT3

不像GPT2一样追求zero-shot,而换成了few-shot Abstract Recent work has demonstrated substantial gains on many NLP tasks and benchmarks by pre-training on a large corpus of text followed by fine-tuning on a specific task. While typically task-agnos…

Day04:APP架构小程序H5+Vue语言Web封装原生开发Flutter

目录 常见APP开发架构 APP-开发架构-原生态-IDEA APP-开发架构-Web封装-平台 APP-开发架构-H5&Vue-HBuilderX WX小程序-开发架构-Web封装-平台 WX小程序-开发架构-H5&Vue-HBuilderX 思维导图 章节知识点: 应用架构:Web/APP/云应用/三方服…

Leetcode—82. 删除排序链表中的重复元素 II【中等】

2024每日刷题(117) Leetcode—82. 删除排序链表中的重复元素 II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val…

在Golang中简化日志记录:提升性能和调试效率

最大化效率和有效故障排除:在Golang中简化日志记录 日志记录是软件开发的一个基本方面,有助于调试、监控和理解应用程序的流程。在Golang中,有效的日志记录实践可以显著提高性能并简化调试过程。本文探讨了优化Golang日志记录的技术&#xf…

服务器数据恢复-异常断电导致服务器硬盘离线的数据恢复案例

服务器数据恢复环境: dell某型号服务器中有一组通过raid卡组建的raid10,该raid阵列中一共有4块磁盘。上层部署XenServer虚拟化平台,作为网站服务器使用。 服务器故障: 服务器异常断电导致服务器上的一台虚拟机不可用。需要恢复这…

Java Web(八)--Servlet(二)

Servlet API Servlet API 包含以下4个Java包: 1. javax.servlet:其中包含定义Servlet和Servlet容器之间契约的类和接口。 2. javax.servlet.http:主要定义了与HTTP协议相关的HttpServlet类,HttpServletRequest接口和HttpServl…

C语言第三十二弹---自定义类型:联合和枚举

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 目录 1、联合体 1.1、联合体类型的声明 1.2、联合体的特点 1.3、相同成员的结构体和联合体对比 1.4、联合体大小的计算 1.5、联合的⼀个练习 2、枚举类型 …

MyCAT从入门到实战(配置文件介绍)

用户(user) 配置文件位置mycat/conf/user/root.user.json。这个配置文件主要是用来配置MyCAT的登录用户 的,也就是我们连接8066这个端口的用户信息。 [rootservice bin]# cat /usr/local/mycat/conf/users/root.user.json {"dialect&q…

网络初识(概念入门)

目录 1.局域网VS广域网 1.1局域网 1.2广域网 2.五元组 2.1 IP和端口 2.1.1 IP 2.1.2端口号 2.2协议 3.协议分层 4. TCP/IP五层模型 5.封装和分用 5.1封装 5.2分用 1.局域网VS广域网 1.1局域网 简单介绍:指在某一特定区域内由多台计算机组成的互联网组…

springboot-基础-添加model和controller的简单例子+常用注解含义

备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 上一篇:springboot-基础-eclipse配置helloword示例 目录 添加model和controller的例子注解开发使用RestController 大坑 Model ModelMap和ModelAndView的区别 添加model和c…

only office-用着确实很省心

小程一言 最近一直在使用各种办公软件进行学习笔记整理,但是在使用过程中,总感觉不是自己想要的一款软件,想要一款真正懂自己的软件,是一个选择的过程。最近在网上闲逛发现一款宝藏软件,好奇心驱使我去进行适用&#…

Apache POl

介绍 Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下,POI都是用于操作 Excel 文件。 Apache POl 的应用场景 1.银行网银系统导出交易…

VScode打开keil5软件的内容

VScode想要打开keil5软件的内容,需要在此引入 具体可参考: VS Code环境下编辑、编译、下载Keil工程代码

Zoho多語言解決方案|爲全球企業拓展俄羅斯市場

我們身處於一個全球化的商業環境中,企業跨越國界拓展業務已然是常態。然而,語言和文化差異常常是企業在海外市場遇到的主要挑戰之一。Zoho系統提供豐富強大的SaaS軟件,在語言需求方面也是一直在進步。本篇文章通過Zoho CRM和Zoho People兩個熱…

《大模型时代-ChatGPT开启通用人工智能浪潮》精华摘抄

原书很长,有19.3w字,本文尝试浓缩一下其中的精华。 知识点 GPT相关 谷歌发布LaMDA、BERT和PaLM-E,PaLM 2 Facebook的母公司Meta推出LLaMA,并在博客上免费公开LLM:OPT-175B。 在GPT中,P代表经过预训练(…

排序算法之快速排序(挖坑法)

挖坑法的思想:记第一个数为key,要调整key的位置,使得左边的都要比key的小,右边的数都比key的大。 记录下关键字keybegin,把28那个位置挖坑holebegin 让end找到小于28(key)的数,把那…

开源现场总线协议栈(ethercat、ethernet/ip、opc ua、profinet、canopen、modbus)

ecat主站及其相关: 1.soem:GitHub - OpenEtherCATsociety/SOEM: Simple Open Source EtherCAT MasterSimple Open Source EtherCAT Master. Contribute to OpenEtherCATsociety/SOEM development by creating an account on GitHub.https://github.com/…

PostgreSQL部署与配置

文章目录 说明服务部署配置文件postgresql.confpg_hba.conf生效配置说明 此文将介绍PostgreSQL数据库的部署、配置及远程连接、认证配置等。需了解以下常用语句,请移步:PostgreSQL常用SQL语句 免密交互增删改查备份恢复数据迁移用户管理权限管理进程管理查询优化服务部署 # …

【Simulink系列】——Simulink与Matlab接口使用命令行进行仿真

声明:本系列博客参考有关专业书籍,截图均为自己实操,仅供交流学习! 一、Simulink与Matlab接口 1、Matlab工作区变量设置模块参数 Matlab工作区的变量可以作为模块的设置参数 2、Matlab工作区变量作为输入信号 使用From Worksp…

项目解决方案:海外门店视频汇聚方案(全球性的连锁店、国外连锁店视频接入和汇聚方案)

目 录 一、概述 二、建设目标及需求 2.1 建设目标 2.2 需求描述 2.3 需求分析 三、建设方案设计 3.1 系统方案拓扑图 3.2 方案描述 3.3 服务器配置推荐 四、产品功能 4.1 资源管理平台 (1)用户权限管理 (2&#xff09…