1、強制等待:sleep()
引入time.sleep(second),強制等待,機關秒
from time import sleep
from selenium import webdriver
from driverPath import driver_dir
# driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path=driver_dir.chrome_driver_path)
driver.get('https://www.baidu.com')
# 強制等待3秒
sleep(3)
driver.quit()
2、顯示等待:WebDriverWait()
顯示等待:設定一個等待時間和一個條件,在規定時間内,每隔一段時間檢視下條件是否成立,如果成立那麼程式就繼續執行,否則就提示一個逾時異常(TimeoutException)。 通常情況下WebDriverWait類會結合expected_condition類一起使用
expected_condition類:
# 判斷标題是否和預期的一緻
title_is
# 判斷标題中是否包含預期的字元串
title_contains
# 判斷指定元素是否加載出來
presence_of_element_located
# 判斷所有元素是否加載完成
presence_of_all_elements_located
# 判斷某個元素是否可見. 可見代表元素非隐藏,并且元素的寬和高都不等于0,傳入參數是元組類型的locator
visibility_of_element_located
# 判斷元素是否可見,傳入參數是定位後的元素WebElement
visibility_of
# 判斷某個元素是否不可見,或是否不存在于DOM樹
invisibility_of_element_located
# 判斷元素的 text 是否包含預期字元串
text_to_be_present_in_element
# 判斷元素的 value 是否包含預期字元串
text_to_be_present_in_element_value
#判斷frame是否可切入,可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it
#判斷是否有alert出現
alert_is_present
#判斷元素是否可點選
element_to_be_clickable
# 判斷元素是否被選中,一般用在下拉清單,傳入WebElement對象
element_to_be_selected
# 判斷元素是否被選中
element_located_to_be_selected
# 判斷元素的選中狀态是否和預期一緻,傳入參數:定位後的元素,相等傳回True,否則傳回False
element_selection_state_to_be
# 判斷元素的選中狀态是否和預期一緻,傳入參數:元素的定位,相等傳回True,否則傳回False
element_located_selection_state_to_be
#判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是否重新整理了
staleness_of
WebDriverWait(driver, 逾時時長, 調用頻率, 忽略異常).until(可執行方法, 逾時時傳回的資訊) WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver: 浏覽器驅動
timeout: 逾時時間,等待的最長時間(同時要考慮隐性等待時間)
poll_frequency: 每次檢測的間隔時間,預設是0.5秒
ignored_exceptions:逾時後的異常資訊,預設情況下抛出NoSuchElementException異常
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
from driverPath import driver_dir
# driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path=driver_dir.chrome_driver_path)
driver.get('https://www.baidu.com')
# 設定浏覽器:driver 等待時間:20s , 判斷條件:等待id='kw'的元素加載完成
wait = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'kw')))
input_box = driver.find_element(By.ID, 'kw')
# 在關鍵詞輸入:關鍵詞
input_box.send_keys('關鍵詞')
driver.quit()
3、隐式等待:implicitly_wait(second)
implicitly_wait(xx):設定等待時間為xx秒,等待元素加載完成,如果到了時間元素沒有加載出,就抛出一個NoSuchElementException的錯誤。
注意:隐性等待對整個driver的周期都起作用,是以隻要設定一次即可。
from selenium import webdriver
from driverPath import driver_dir
# driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path=driver_dir.chrome_driver_path)
driver.implicitly_wait(30)
# 隐性等待,最長等30秒
driver.get('https://www.baidu.com')
print(driver.current_url)
print(driver.title)
driver.quit()