頁面還沒加載出來就對頁面上的元素進行操作,就會出現(xiàn):因為加載元素延時造成的腳本失敗,我們可以通過設(shè)置等待時間來提升自動化腳本的穩(wěn)定性。
WebDriver 提供了3種類型的等待:顯式等待、隱式等待、休眠
2 顯式等待是針對某一個元素進行相關(guān)等待判定;
2 隱式等待不針對某一個元素進行等待,全局元素等待;
2 sleep 休眠方法。
WebDriverWait 類由 WebDriver 提供的等待方法。在設(shè)置時間內(nèi),默認每個一段時間檢測一次當(dāng)前頁面元素是否存在,如果超過設(shè)置時間檢測不到則拋出異常
2 WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
2?n Driver 瀏覽器驅(qū)動
2?n Timeout最長超時時間,默認以秒為單位
2?n poll_frequency 檢測的間隔時間,默認為 0.5 秒
2?n ignored_exceptions 超 時 后 的 異 常 信 息 , 默 認 情 況 下 拋 出
2?NoSuchElementException 異常
2 WebDriverWait 一般由 until()和 until_not()方法配合使用
2?n until(method,message=’’) 調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),知道返回值為 Ture
2?n until_not(method,message=’’ 調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù),知道返回值為 False
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
# as 將expected_conditions重命名為EC
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
# 指定瀏覽器位置
chrome_location = r'D:\software\Win_x64_1135105_chrome-win\chrome-win\chrome.exe'
options = webdriver.ChromeOptions()
options.binary_location = chrome_location
driver = webdriver.Chrome(options=options)
driver.get(r'https://www.baidu.com/')
driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('selenium')
sleep(3)
# 顯式等待?30 秒—判斷搜索按鈕是否存在
element = WebDriverWait(driver, 30, 0.5).until(EC.presence_of_element_located((By.ID, 'su'))
element.click()
sleep(3)
driver.quit()
implicitly_wait() 默認參數(shù)的單位為秒。隱性等待設(shè)置了一個時間,在一段時間內(nèi)網(wǎng)頁是否加載完成,如果完成了,就進行下一步;在設(shè)置的時間內(nèi)沒有加載完成,則會報超時加載。
# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from time import sleep, ctime
# 指定瀏覽器位置
chrome_location = r'D:\software\Win_x64_1135105_chrome-win\chrome-win\chrome.exe'
options = webdriver.ChromeOptions()
options.binary_location = chrome_location
driver = webdriver.Chrome(options=options)
# 隱式等待?30 秒
driver.implicitly_wait(30)
driver.get(r'https://www.baidu.com')
# 檢測搜索框是否存在
try:
???driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('selenium')
???driver.find_element(By.CSS_SELECTOR, '#su').click
except NoSuchElementException as msg:
???print(msg)
sleep(3)
driver.quit()
sleep()方法有 Python 的 time 模塊提供。在腳本調(diào)試過程中,希望腳本再執(zhí)行到某一位置時做固定時間的休眠,則可以使用。
sleep()默認參數(shù)以秒為單位,如果設(shè)置時長小于 1 秒,則用小數(shù)表示。
?
Copyright ? 2013-2021 河南云和數(shù)據(jù)信息技術(shù)有限公司 豫ICP備14003305號 ISP經(jīng)營許可證:豫B-20160281