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.显示等待,用法相对于前两种相对复杂,但是也是最灵活的。

 
posted @ 2023-03-11 10:08  海_纳百川  阅读(128)  评论(0编辑  收藏  举报
本站总访问量