selenium中的延時等待方式有三種:強制等待:sleep() 隱示等待:implicitly_wait() 顯示等待 WebDriverWait()
1.強制等待:sleep(),time模塊下的方法;只能夠針對當前單步操作;缺點:無法很好的控制腳本的執行速度、並且只針對局部一步操作而言、如果每步需要添加則出現過多重復代碼,且休眠時間如果超過5秒會出現瀏覽器回話鏈接斷開;
from time import sleep sleep(2) #傳入等待時間
2.隱示等待:implicitly_wait():隱式等待;webdriver驅動器對象下的方法;針對是一次會話所有操作,相當於是一個全局等待;只需要聲明定義一次,通常在設計腳本中會應用於setUp方法;
from selenium import webdriver #導包 driver = webdriver.Chrome() #獲取瀏覽器驅動對象 driver.implicitly_wait(20) #隱示等待,傳入等待時間
3.顯示等待,WebDriverWait(驅動器對象,等待時間)
# 兩種導入WebDriverWait方式 from selenium.webdriver.support.wait import WebDriverWait # 導包 from selenium.webdriver.support.ui import WebDriverWait # 導包
使用webdriverwait只能夠與until和not until兩個方法進行使用;until和not until中傳入的參數可以是lambda匿名函數或者預置條件expected_conditions
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # WebDriverWait 需要傳入的是驅動器對象,總體等待時間和刷新時間間隔時間間隔默認0.5 # Presence_of_element_located 表示元素是否存在 必須以元組的形式傳入,所以使用到By方法進行定位 WebDriverWait(driver,30,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
如果unitl或者not unitl傳入的方法定位元素查找到則會返回對應的對象,如果未找到則會拋出TimeoutException異常
EC預置條件模塊具有很多類型的判斷:
presence_of_element_located 判斷當前元素是否存在
Presence_of_all_elements_located 判斷一組元素是否存在
Text_to_be_present_in_element_value 判斷元素值是否有xx文本信息
Presence_of_all_elements_located 判斷一組元素是否存在