使用sleep
from selenium import webdriver from time import sleep browser = webdriver.Chrome() browser.get('https://zcgnotes.com/') sleep(3) print browser.page_source browser.quit()
隱式等待
隱性等待即設置最長等待時間,如果頁面加載完成或者等待時間到才執行下一步,一般只要在初始化時設置一次即可。
# -*- coding: utf-8 -*- from selenium import webdriver browser = webdriver.Chrome() browser.implicitly_wait(10) #隱式等待,最長等待10秒 browser.get('https://zcgnotes.com/') print browser.page_source browser.quit()
顯式等待
顯式等待即設置最長等待時間,配合until()或until_not一齊使用,設定時間內條件成立時才執行下一步,超時則throw TimeoutException
# -*- coding: utf-8 -*- 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 browser = webdriver.Chrome() browser.get('https://zcgnotes.com/') locator = (By.XPATH, '//p[text()="作code家的筆記"]') try: WebDriverWait(browser, 10, 0.5).until(EC.presence_of_element_located(locator)) #最長等待10秒,每0.5秒檢查一次條件是否成立 print browser.find_element_by_xpath('//p[text()="作code家的筆記"]') finally: browser.close()
*隱或等待與顯式等待可以同時使用,等待時間取較大一方(顯式等待條件成立時不等待)
until()和until_not()內傳入的expected_conditions: 官方說明
常用的有:
presence_of_element_located(locator) #指定元素出現,return WebElement 一次 presence_of_all_elements_located(locator) #指定元素出現,return 全部合條件的WebElement,類型為list invisibility_of_element(locator) #指定元素為不可見或者沒有出現
等等