15-三种等待方式

目录

1.  强制等待

2. 隐式等待

3. 显式等待

4. 总结


1.  强制等待

  • 方法:sleep(seconds),seconds 等待时间,单位 秒 s
  • 说明:不管浏览器是否加载完了,程序都得等待3秒,不建议使用,严重影响执行速度
# -*- coding: utf-8 -*-
# @Time    : 2021/1/17
# @Author  : 大海

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('https://blog.youkuaiyun.com/IT_heima?spm=1001.2014.3001.5343')

sleep(2)  # 强制等待2秒再执行下一步
print(driver.current_url)
print(driver.title)

driver.close()

2. 隐式等待

  • 方法:implicitly_wait(time_to_wait) ,  time_to_wait 等待时间, 单位 秒 s
  • 说明:设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。此方法是全局性的,设置一次即可
  • 弊端:程序会一直等待整个页面加载完成,也就是一般情况下看到浏览器标签栏那个小圈不再转,才会执行下一步,但是页面的元素已加载完,js等未加载完,仍会等待
# -*- coding: utf-8 -*-
# @Time    : 2021/1/17
# @Author  : 大海

from selenium import webdriver

driver = webdriver.Chrome()
# 隐式等待,最长等20秒
driver.implicitly_wait(20)
driver.get('https://blog.youkuaiyun.com/IT_heima?spm=1001.2014.3001.5343')

print(driver.current_url)
print(driver.title)

driver.close()

3. 显式等待

     init方法:__init__(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)

  • driver :浏览器驱动。  
  • timeout :最长超时时间,默认以秒为单位。
  • poll_frequency :检测的间隔(步长)时间,默认为0.5S。
  • ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。

    unit方法:until( method, message='')

  • method:传入执行的方法
  • message:超时时的提示信息

    until_not方法:同until

  • 使用: WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)
# -*- coding: utf-8 -*-
# @Time    : 2021/1/17
# @Author  : 大海

from selenium import webdriver
from selenium.common.exceptions import ElementNotVisibleException
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
# 隐式等待,最长等20秒
driver.implicitly_wait(20)
driver.get('http://baidu.com')

print(driver.current_url)
print(driver.title)

# 每隔0.5s去查找元素 kw,超时时间为10s,返回WebElement对象
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("kw"))
element.send_keys('selenium')

# 每隔1去查找元素 kw是否可见,超时时间为30s,返回结果为布尔值  
is_disappeared = WebDriverWait(driver, 30, 1, ElementNotVisibleException).until_not(
    lambda x: x.find_element_by_id("kw1").is_displayed())
print(is_disappeared)

# 错误用法   until() 第一个参数应该是方法,此处传入的是WebElement对象,所以不正确,可参照上面的写法
# WebDriverWait(driver, 10).until(driver.find_element_by_id('kw'))
driver.close()

4. 总结

  • sleep():强制等待n秒,影响程序执行速度
  • implicitly_wait():隐式等待,全局性,设置一次即可,针对的是整个页面是否加载完成
  • WebDriverWait():显示等待,针对单个元素判断,灵活
  • 隐式等待和显时等待同时使用时,超时时间取两者最长的

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习de测试小白

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值