1. 程式人生 > 實用技巧 >seleinum頁面載入顯式等待和隱式等待

seleinum頁面載入顯式等待和隱式等待

有時候,我們使用selenium用來獲取一些元素時,需要等待頁面將某些元素載入網站才能夠獲取我們需要的資料,所以,這時候我們就需要等待頁面的功能。

1、顯式等待(推薦)

顯式等待是你在程式碼中定義等待一定條件發生後再進一步執行你的程式碼。 最糟糕的案例是使用time.sleep(),它將條件設定為等待一個確切的時間段。 這裡有一些方便的方法讓你只等待需要的時間。WebDriverWait結合ExpectedCondition 是實現的一種方式。需要的元素髮現就會繼續執行

 1 from selenium import webdriver
 2 from selenium.webdriver.common.by import By
 3 from selenium.webdriver.support.ui import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 
 6 driver = webdriver.Chrome()
 7 driver.get("https://www.baidu.com/")
 8 try:
 9     element = WebDriverWait(driver, 10).until(
10         EC.presence_of_element_located((By.XPATH, '//*[@id="su"]'))
11     )
12     text = driver.page_source
13     print("text", text)
14 finally:
15     driver.quit()

2、隱式等待(也不錯)

如果某些元素不是立即可用的,隱式等待是告訴WebDriver去等待一定的時間後去查詢元素。 預設等待時間是0秒,一旦設定該值,隱式等待是設定該WebDriver的例項的生命週期。

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # seconds
driver.get("https://www.baidu.com/")
myDynamicElement = driver.find_element_by_xpath('//*[@id="su"]')
text = driver.page_source
print("text", text)

3、time.sleep(一般不推薦)

from selenium import webdriver
import time
driver = webdriver.Chrome()
# driver.implicitly_wait(10) # 這個單位是秒
driver.get("https://www.baidu.com/")
time.sleep(2) 
text = driver.page_source
print("text", text)