【selenium】元素等待

【selenium】元素等待

    • 1、三种元素等待的区别
    • 2、sleep等待
    • 3、隐式等待
    • 4、显示等待
      • 4.1 WebDriverWait类
      • 4.2 expected_conditions类

1、三种元素等待的区别

特点sleep隐式等待显示等待
原理不论网页/元素是否加载完成,都会强制等待x秒设置一个等待时间,等待页面元素在规定时间内全部加载完后执行下一步,超出规定时间不等待显式等待 相比隐式等待更灵活,是先设定一个条件函数和一个最长等待时长,轮询判断条件函数的返回值,如果返回 True,则开始执 行后面的操作,否则会一直等待,直到超时报元素未找到异常
等待对象无指定等待元素页面的所有元素定位的目标元素
适用场景减慢自动化脚本执行的速度来调试设置整个页面的加载等待时间针对某个元素设置等待
缺点不论元素是否加载完都会等待x秒,直到到了等待时间,效率最低所需的元素已经完成加载,会继续等待页面其他"不相关"元素加载完成,效率低代码相对前两种较复杂
优点简单粗暴设置一次,整个webdrver生命周期内生效执行时间最短,效率最高
语法time.sleep(5)driver.implicitly_wait(5) WebDriverWait(self.driver, timeout, frequency).until(EC.visibility_of_element_located(loc))

2、sleep等待

原理:程序休眠
示例:

import time
time.sleep(5)

3、隐式等待

原理:设置一个等待时间,等待页面元素在规定时间内全部加载完后执行下一步,超出规定时间不等待
示例:

# 隐式等待设定时长为5s driver.implicitly_wait(5)  driver.get('http://www.baidu.com') # 隐式等待所有元素加载完成,直到超过设定的最长时间 driver.find_element_by_id("kw").sendkeys('百度')

4、显示等待

原理 :显式等待 相比隐式等待更灵活,是先设定一个条件函数和一个最长等待时长,轮询判断条件函数的返回值,如果返回 True,则开始执 行后面的操作,否则会一直等待,直到超时报元素未找到异常

常用的类:WebDriverWait & expected_conditions|

4.1 WebDriverWait类

WebDriverWait 是 Selenium 提供的一种等待机制,用于等待页面上某个元素的出现或者达到某种状态

语法结构:
WebDriverWait(self.driver, timeout, frequency).until(EC.visibility_of_element_located(loc))

WebDriverWait(self.driver, timeout, frequency).until_not(EC.visibility_of_element_located(loc))

  • timeout: 超时时间,单位秒
  • frequency:轮询间隔,默认0.5s
  • until:等待条件,如果条件返回True执行下一步,否则等待超时后抛出TimeoutException异常
  • until_not:等待条件,如果条件返回False执行下一步,否则等待超时后抛出TimeoutException异常

使用示例:

 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://baidu.com") # 设置等待10s,element =WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID, "kw")))

4.2 expected_conditions类

expected_conditions用于定义和判断条件是否满足的工具类,用于指定等待条件。
以下是expected_conditions类封装的几个常用的方法:

  1. title_is() 通过页面标题判断
#设置元素等待,直到标题出现:百度一下,你就知道
WebDriverWait(driver,3).until(ECS.title_is('百度一下,你就知道')) 
  1. title_contains() 通过页面标题内容包含关键字
#设置元素等待,直到标题包含:百度
WebDriverWait(driver,3).until(ECS.title_contains('百度')) 
  1. presence_of_element_located(locator) 判断某个元素是否存在于dom树中,页面上不一定可见
    presence_of_all_elements_located(locator) 判断定位的任意元素是否存在于dom树中, 页面上不一定可见
WebDriverWait(driver,3).until(ECS.presence_of_element_located((By.ID,'kw')))
WebDriverWait(driver,3).until(ECS.presence_of_all_elements_located((By.CSS_SELECTOR,'.s_ipt'))) 
  1. visibility_of_element_located(locator) 判断元素在页面上是否可见,且宽高≠0
    visibility_of_any_elements_located(locator) 判断定位的任意元素在页面上是否可见
    visibility_of(element) 判断元素加载到dom中,且页面可见 ,两者等价
# 等待定位的元素出现在页面上
WebDriverWait(driver,3).until(ECS.visibility_of_element_located((By.ID,'kw')))
# 等待定位的任意一个元素出现在页面上
WebDriverWait(driver,3).until(ECS.visibility_of_any_elements_located((By.CSS_SELECTOR,'.s_ipt')))
# 等待定位的元素出现在页面上
WebDriverWait(driver,3).until(ECS.visibility_of(driver.find_element(By.ID,'su')))
  1. nvisibility_of_element_located(locator) 判断某元素是否不可见或不在dom中
WebDriverWait(driver,3).until(ECS.invisibility_of_element_located((By.CSS_SELECTOR,'#dide_button')))
  1. text_to_be_present_in_element(locator, text_) 判断某元素是否包含指定文字
 WebDriverWait(driver,3).until(ECS.text_to_be_present_in_element((By.XPATH,"//* [@id='bottom_layer']/div/p[1]/a"),'关于百度')) 
  1. alert_is_present() 判断弹窗是否出现
WebDriverWait(driver,3).until(ECS.alert_is_present()) 

更多判断方法可见expected_conditions官方文档

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

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

相关文章

Java 修改微信公众号后台服务器地址URL后,微信公众平台客服功能接收不到用户发送的消息的解决办法

解决办法: 检查一下微信回调URL是否转发了客服消息。 /*** 处理具体的回调信息*/ PostMapping("/callback") public void callback(RequestParam(name "signature", required false) String signature,RequestParam(name "timestamp&q…

centos系统查找mysql的配置文件位置

执行命令查找mysql的安装目录: which mysql cd进入mysql的安装目录 cd /usr/bin 查找配置文件位置 ./mysql --help | grep "my.cnf" 定位配置文件 cd /etc 查找命令还可以用find命令 find / -name "my.cnf"

iOS UITableView自带滑动手势和父视图添加滑动手势冲突响应机制探索

场景 我们有时候会遇到这样的一个交互场景:我们有一个UITableView 放在一个弹窗中,这个弹窗可以通过滑动进行展示和消失(跟手滑动的方式),然后这个UITableView放在弹窗中,并且可以滚动,展示一些…

用微信服务号支付门诊缴费

时间上午10刚过,医院里计价收费处排起了长龙,放眼望去,左边的窗口六条队。右边在原来发药的位置也开辟了收费窗口,数了一下有四条队。一共十条排队付费的长龙,每一条队伍的人数不下20人,也即超过200人在排队…

百度智能云将大模型引入网络故障定位的智能运维实践

物理网络中,某个设备发生故障,可能会引起一系列指标异常的告警。如何在短时间内从这些告警信息中找到真正的故障原因,犹如大海捞针,对于运维团队是一件很有挑战的事情。 在长期的物理网络运维工作建设中,百度智能云通…

【linux】linux的特殊符号

特殊字符用途示例,参数分隔符或命令分隔符git log --prettyformat:"%h,%an,%ar,%s"/文件路径分隔符,根目录cd /home/user/documents\转义字符,行继续echo "This is a long command \定义字符串,不解析变量和转义字符echo Hell…

探索 Postman API 网络图:可视化 API 交互的窗口

引言 在当今快速发展的软件开发领域,API(应用程序编程接口)扮演着至关重要的角色。Postman,作为业界领先的 API 开发工具,提供了一个强大的功能——API 网络图,它可以帮助开发者以图形化的方式理解和分析 …

【前端从入门到精通:第十一课: JS基本语法】

独闯JavaScript 了解JavaScript 为什么学习JavaScript JavaScript 是 web 开发者必学的三种语言之一: HTML 定义网页的内容 CSS 规定网页的布局 JavaScript 对网页行为进行编程 我们学习 JavaScript,以及 JavaScript 如何与 HTML 和 CSS 协同工作的知…

数字力量助西部职教全面提升——唯众品牌大数据、人工智能系列产品中标甘肃庆阳职院数字经济人才培养基地!

近日,唯众品牌凭借在大数据和人工智能领域深耕多年的技术积累和卓越产品,成功中标庆阳职业技术学院全国一体化算力网络国家枢纽节点数字经济人才培养基地项目,标志着唯众在助力西部职业教育与数字经济融合发展的新征程上迈出了坚实的一步。 …

Data Guard高级玩法:failover备库后,通过闪回恢复DG备库

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享…

怎样将aac转换mp3格式?推荐四个aac转MP3的方法

怎样将aac转换mp3格式?当需要将aac格式音频转换为MP3格式时,有几种方法可以轻松实现这一目标。MP3是一种广泛支持的音频格式,几乎所有设备和平台都能播放MP3文件,包括各种音乐播放器、手机、平板电脑和汽车音响系统。而且它也提供…

MySQL:视图、用户管理、C/C++/图形化界面链接访问数据库、网页逻辑

文章目录 1.视图1.1 视图的基本使用1.2 视图的基本规则 2.用户管理2.1 创建、删除、修改用户2.2 数据库权限 3.C/C/图形化界面链接访问数据库3.1 准备工作及常用接口介绍3.2 图形化界面访问MySQL 4.用户逻辑(注册&&登录) 1.视图 视图是一个虚拟表,其内容由…

嵌入式上gst rtsp server opencv mat

0 安装gstreamer sudo apt install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-…

请写sql满足业务:找到连续登录3天以上的用户

为了找到连续登录超过 3 天的用户,我们可以使用 SQL 窗口函数和递归查询来实现。假设有一个 user_logins 表,包含以下字段: user_id(用户ID)login_date(登录日期) 假设 login_date 是 DATE 类…

怎么提高音频声音大小?提高音频声音大小的四种方法

怎么提高音频声音大小?在音频处理和编辑中,增加声音的音量是一个常见的需求,尤其是在确保音频清晰度和听觉效果的同时。调整音频的音量不仅仅是简单地提高音频的响度,它也涉及到如何保持音质的高标准,确保没有失真或削…

后端登录校验——Filter过滤器和Interceptor拦截器

一、Filter过滤器 前面我们学会了最先进的会话跟踪技术jwt令牌,那么我们要让用户使用某些功能时就要根据jwt令牌来验证用户身份,来决定他是否登陆了、让不让用户访问这个页面(或功能) 但是这样一来,没发一个请求&…

绝区零启动遇到的问题

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ​ 绝区零》作为米哈游的一款全新都…

【机器学习】(基础篇三) —— 线性回归

线性回归 本文介绍最经典的监督学习问题——线性回归,包括单变量线性回归和多变量线性回归 线性回归是回归任务,输入是带有标签的数据,根据数据关系,拟合出一个线性函数,并利用该函数进行预测等操作。线性回归分为单…

Python爬虫:BeautifulSoup的基本使用方法!

1.简介 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析“标签树”等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。 Beautiful Soup…

回收站删除了是不是彻底删除了 回收站删除了怎么找回 回收站删除了还能找回来吗

电脑删除的数据文件一般不会直接被彻底删除掉,而是会暂存在回收站中,这样设计主要是为了防止误删除等操作,如果不小心删除了很重要的文件,只需要在回收站对文件进行还原即可。为了让大家更了解回收站,下面给大家详细讲…