selenium三大等待_智能等待

没有找到抛出异常(TimeoutException)。效率高,可以自定义条件。

from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until(条件)

WebDriverWait(会话对象, 超时时长(秒),去查看条件的周期默认0.5).until_not(条件)

selenium3当中,每一个条件是以类的形式实现的。每一个类都有__init__, call

selenium4当中,每一个条件是以函数的形式实现的。每一个函数都有一个_predicate内部函数。闭包
使用显性等待的时候,先确定你的条件是什么。然后再去使用显性等待。

等待效果只有一次,不像隐性等待全局可用。

比较多的用法:显性等待 + 短暂的sleep

常用的条件:

visibility_of_element_located(locator) — locator对应的元素是可见的

element_to_be_clickable(mark) — mark对应的元素可点击

三、智能等待:隐形等待

调用find_element/find_elements方法的时候,如果元素没找到不会立马报错,
会主动使用隐性等待,达到最大等待时间后,抛出异常。

一个会话(浏览器打开到关闭这个过程)当中,只需要调用一次,全局可用。

没有办法对精准度的元素进行定位,会影响实际的运行效率。

三种方法一起使用代码如下:

 1 import time
 2 from selenium import webdriver
 3 from selenium.webdriver.support.wait import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 
 6 driver = webdriver.Chrome()
 7 driver.get("https://www.baidu.com")
 8 #隐形等待
 9 driver.implicitly_wait(10)
10 driver.maximize_window()
11 # 显性等待
12 #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
13 el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
14 el.click()
15 # 强制等待
16 time.sleep(3)
17 driver.quit()

显示等待结合预期条件判断代码如下:

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# driver = webdriver.Chrome()
# driver.get("https://www.baidu.com")
# #隐形等待
# driver.implicitly_wait(10)
# driver.maximize_window()
# # 显性等待
# #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
# el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
# el.click()
# # 强制等待
# time.sleep(3)
# driver.quit()
#
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")

locator = ('xpath','//a[text()="新闻"]')
# WebDriverWait()一般与 until()或 until_not()方法配合使用
# until(),直到返回值为 True。
# until_not(),直到返回值为 Flase。
# 判断元素是否可见
# 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可见,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator),message="元素可见")
# 判断元素是否可以点击
# 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可点击,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable(locator))
# 判断元素是否存在
# 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))
driver.find_element(*locator).click()
# 判断标题是否不存在
# 在设置时间内,默认每隔一段时间检测一次标题是否不存在,如果超过设置时间仍检测不到,则抛出异常。
WebDriverWait(driver,5,0.5).until_not(EC.title_is("123123"),message="标题不是这个")
time.sleep(3)


![img](https://img-blog.csdnimg.cn/img_convert/cea56281503031665aee1fbfa71a64af.png)
![img](https://img-blog.csdnimg.cn/img_convert/4785a051bda8cb77cf0b3b1853363fce.png)

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

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

究,那么很难做到真正的技术提升。**

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值