由于网络速度慢、服务器处理请求慢、电脑配置低等原因,在web自动化过程中常常需要使用到元素等待。
那么什么是元素等待呢?
在定位元素时,如果定位到元素,则会直接返回该元素,不触发等待。
如果没有定位到元素,则间隔一段时间后再去定位元素。
在定位元素时,如果未找到,会在指定时间内一直等待的过程,就是元素等待。
元素等待分为两种:分别是隐式等待和显式等待。
一、隐式等待
隐式等待是全局设置,只需要设置一次,就会作用于所有元素。
在等待时间内页面没有加载完成,时间一到也会进行下一步操作,这种情况可能出现要定位的元素没有出现,从而报找不到元素的错误,即NoSuchElementException。
隐式等待直接通过驱动对象调用,即driver.implicity_wait(timeout),其中timeout为最大等待时间,单位是秒。
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = "http://www.baidu.com"
driver.get(url)
driver.maximize_window()# 隐式等待
driver.implicitly_wait(10)driver.find_element(By.ID, "kw").send_keys("等待")sleep(2)
driver.quit()
二、显式等待
显式等待作用于指定的元素,会一直等待这个元素出现,当超过时间元素还未出现,会报TimeoutException错误。
显式等待封装在WebDriverWait类中:
导包:from selenium.webdriver.support.wait import WebDriverWait
使用:WebDriverWait(driver,10,1).until(lambda x:x.find_element(By.ID,“kw”)),其中10是等待的时间,1是轮训的时间,默认轮询时间为0.5。
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Chrome()
url = "http://www.baidu.com"
driver.get(url)
driver.maximize_window()# 显式等待
WebDriverWait(driver, 10, 1).until(lambda x: x.find_element(By.ID, "kw")).send_keys("等待")sleep(2)
driver.quit()