python时间等待
一、强制等待—sleep
强制等待:不管浏览器元素是否加载完成,程序都得等待3秒,3秒一到,继续执行下面的代码。
ps:不是太推荐,会造成程序运行时间过长
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
sleep(3) # 强制等待3秒再执行下一步
print(driver.title)
二、隐式等待—implicitly_wait()
1、implicitly_wait(xx):设置等待时间为xx秒,等待元素加载完成,如果到了时间元素没有加载出,就抛出一个NoSuchElementException的错误。
2、注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。隐性等待,最长等30秒
3、不利于个性化定制
driver.implicitly_wait(30)
三、显示等待—WebDriverWait()
1、导入WebDriverWait包后可以使用。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
PS:个人比较喜欢这种时间等待方式
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 设置浏览器:driver 等待时间:20s
wait = WebDriverWait(driver, 20)
# 设置判断条件:等待id='kw'的元素加载完成
input_box = wait.until(EC.presence_of_element_located((By.ID, 'kw')))
# 在关键词输入:关键词
input_box.send_keys('关键词')
WebDriverWait的具体参数和方法:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常
until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,
until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
method
message
四、三种方式的优缺点:
1.强制等待使用最简单,但是无论页面加载完成都要加载设定的时间长度,不够灵活
2.隐式等待浏览器会在设定的时间内不断再DOM种刷新查询该元素,知到出现位置,会降低测试性能。
3.显示等待,用法相对于前两种相对复杂,但是也是最灵活的。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/17205360.html,如有侵权联系删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!