WebDriver中的3种等待,一次讲清楚_显示等待,自定义等待条件

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

由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="")

调用该方法提供的驱动程序作为参数,直到返回值为True:

WebDriverWait(driver,10).until_not(method,message="")

调用该方法提供的驱动程序作为参数,直到返回值为False

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

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

2 )WebDriverWait与expected_conditions结合使用

from selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Bywait = WebDriverWait(driver,10,0.5)element =waite.until(EC.presence_of_element_located((By.ID,"kw")),message="")# 此处注意,如果省略message=“”,则By.ID外面是三层()

最初执行的代码一开始是这样写: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)显示等待,自定义等待条件



![img](https://img-blog.csdnimg.cn/img_convert/8768f23d8a2317d219bd9c441443ec1a.png)
![img](https://img-blog.csdnimg.cn/img_convert/2d7ac86e5c537ac9e9dffecc13ab5df7.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以告诉您,在Selenium脚本,我们可以使用延时等待处理来等待页面加载完成。 在Selenium,有三类型的等待:隐式等待、显式等待和线程休眠。 1. 隐式等待:设置一个全局等待时间,在这个时间内,Selenium会在每一次查找元素时都等待一段时间,直到元素出现或等待时间结束。隐式等待可以在初始化WebDriver时设置,如下所示: ``` from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # 隐式等待10秒 ``` 2. 显式等待:在特定条件等待,例如等待元素出现、等待元素可点击等。通过ExpectedConditions类定义的条件来进行等待。如下所示: ``` 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() wait = WebDriverWait(driver, 10) # 显式等待10秒 element = wait.until(EC.presence_of_element_located((By.ID, 'myElement'))) # 等待元素出现 ``` 3. 线程休眠:直接使用Python的time模块来让线程休眠一段时间。这方法不太推荐,因为需要手动计算等待时间。如下所示: ``` import time from selenium import webdriver driver = webdriver.Chrome() time.sleep(10) # 线程休眠10秒 ``` 以上就是Selenium脚本的延时等待处理,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值