[Python]Selenium三種等待方式

使用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) #指定元素為不可見或者沒有出現

等等