当前位置: 首页 > news >正文

webdriver中的三种等待

1、强制等待:sleep()
设置固定休眠时间,单位为秒。由Python的time包提供, 导入time包后就可以使用。

缺点:不智能,使用太多的sleep会影响脚本运行速度。

2、隐式等待:implicitly_wait()
由WebDriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期(创建到关闭)起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句;如果超出了设置时间的则抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。

3、显示等待:WebDriverWait()
需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块,单独针对某个特定元素设置的等待时间,可以根据不同元素设置不同的等待条件,driver会在查询周期内去查询该元素是否准备好,如果ok则继续往下,如果不ok的话则继续等待直到超时为止。

1)WebDriverWait()与until()或者until_not()方法结合使用

WebDriverWait(driver,10).until(method,message="")
AI写代码
调用该方法提供的驱动程序作为参数,直到返回值为True:

WebDriverWait(driver,10).until_not(method,message="")
AI写代码
调用该方法提供的驱动程序作为参数,直到返回值为False

在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。

在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False。

2 )WebDriverWait与expected_conditions结合使用

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver,10,0.5)
element =waite.until(EC.presence_of_element_located((By.ID,"kw")),message="")
# 此处注意,如果省略message=“”,则By.ID外面是三层()
AI写代码
最初执行的代码一开始是这样写:presence_of_element_located(By.ID, "su"),这样相当于取到了3个参数(self, By.ID, "su"),而presence_of_element_located类中__init__()方法取的确实是2个参数(self, locator),其中locator调用的是一个tuple(元组)。

该元组(By.ID, "su")作为一个整体,对应相当于1个参数,加上类实例化代表自身的self参数,正好就是2个参数。

因此,执行代码正确的写法为:presence_of_element_located((By.ID, "su")),即需要嵌套两层英文圆括号。

3)显示等待,自定义等待条件

#设置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))
 
————————————————


原文链接:https://blog.csdn.net/wx17343624830/article/details/129014402

http://www.sczhlp.com/news/351.html

相关文章:

  • Python 操作 PDF 文档:主流库选型指南 - E
  • claudecode使用mcp
  • 服务器数据同步:安全高效方案看这里!
  • 微软云(Windows Azure)计算平台的结构及分析
  • 大师 - 杯酒
  • 常用网址
  • 教师资格证考试面试报名流程
  • 平衡树(未完待续)
  • 告别FTP!跨网文件安全交换系统让数据流转0风险
  • CVE-2018-8715 AppWeb认证绕过漏洞 (复现)
  • 树04
  • 周进度报告1
  • 白话Docker系列(二):用Web应用实例深入容器
  • svn强制添加已忽略文件
  • 跨网文件交换新方案:合规审批+传输加密双保障!
  • FastMcp 案例四(Streamable-http)
  • 数仓ETL建设思路
  • SSH-Agent 启用失败问题
  • Django模型开发:模型字段、元数据与继承全方位讲解
  • 矿山领航者:向明智控如何通过CRM实现数字化升级
  • BeanFactory和FactoryBean的区别
  • DevOps工具进化论:2025年国内开发者如何选择最佳技术栈
  • E. Split Into Two Sets
  • 2025.7.28学习日记
  • BSC 验证者获取接口的时间差问题分析 - 若
  • 教师资格证考试笔试报名流程
  • linux RabbitMq 消息队列
  • TheHackersLabs Torrijas writeup
  • 蔚来汽车携手通义灵码入选 2025 世界人工智能大会标杆案例
  • CRMEB会员电商系统高可用集群部署实战:阿里云COS静态资源分离方案详解