web自动化之三大等待

我们为什么需要等待?因为浏览器要进行数据的传输,需要时间,就像我们打开网页一样,需要等待它加载完所有的页面元素,我们才进行操作或点击等。为了我们页面的稳定性,这个等待是必不可少的
selenium里面给我们提供了三个等待方法:
 1.强制等待sleep
 2.隐性等待.implicitly_wait()
 3.显性等待 WebDriverWait().until()/until_not (重点讲)

1.强制等待 sleep
导入impor time 在代码里面是time.sleep(*),这里的 * 是已秒来计算,假如你输入的1,那么就是等待1秒,输入0.5,那么就是强制等待0.5秒

from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")  # 静态页面加载完成
time.sleep(2)  # 等待两秒,执行下一步操作

driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()

2.隐性等待.implicitly_wait()
 隐性等待也称之为全局变量。一般放在请求url之后,只需要写一次就行了。 这也是秒计算

from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")  # 静态页面加载完成
driver.implicitly_wait(30) #隐性等待30秒,
driver.find_element_by_xpath('//div[@id="u1"]//a[@class="lb"]').click()

元素元素可见时,直接点击,要是30秒内元素不可点击,那等待30秒。30秒过后,元素还是不可点击,那就会报错。

3.显性等待 WebDriverWait().until()/until_not()
 显性等待称之为 智能等待。
 
 智能等待:明确的条件(元素可见、元素存在、元素可用等),
  表达式:WebDriverWait(驱动程序,等待时间).until(条件)until_not(条件)
  
 原理:时间+条件。打个比方:在规定的时间内,元素要是可见/存在/可用,那就点击。要是元素在规定的时间外,没有可见/存在/可用的话,那就会报错: TimeoutException
 
 那什么是元素可见、元素存在、元素可用呢?
  元素存在(html里存在,能找到)
  元素可见(存在并且可见-看得见大小-可见才可操作)
  元素可用(可见之后,才有可用的可能性、只读/不可点击)
我们需要导入

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC  #命名为EC,因为名字太长了
from selenium.webdriver.common.by import By

代码:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC  #命名为EC,因为名字太长了
from selenium.webdriver.common.by import By

# 浏览器会话的开始
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

locator = (By.XPATH,'//div[@id="u1"]//a[@class="lb"]')
#等待30秒,元素可见就点击
WebDriverWait(driver,30).until(EC.visibility_of_element_located(locator)) #visibility_of_element_located -- 元素可见
driver.find_element_by_xpath('//div[@id="u1"]//a[@class="lb"]').click()

在工作中,我们用到最多的是显性等待,三个等待假如用到一个py文件里,是互不影响的。

扩展:为什么driver.get为什么不需要等待操作?
   因为在python的代码里面,.get()访问浏览器是一直等到页面元素加载完后,才进行操作,只有.get()这个方法里面才会有这样的机制

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值