Python Selenium等待(waits)頁面載入完成的三種方法

王平發表於2019-01-14

網頁常常會因為網路原因,程式問題等等導致開啟網頁慢,一直在那裡打圈圈。
出現這種情況時網頁裡的很多元素就沒有載入完成,如果你剛好要定位的元素沒有載入完,這時定位的話程式就會丟擲異常。

selenium設定等待(waits)的方法

所以程式裡要加入等待機制,等待元素載入完,要讓程式穩定執行,加等待(waits)這挺重要的,因為網路真的沒有那麼好。

等待頁面載入有三種方法。

1.time.sleep()方法

這是直接呼叫time裡的sleep來強制等待,我前面幾篇文章寫的例子就是用的sleep。

這不是selenium的官方寫法,官方認為使用sleep是比較糟糕的用法,官方寫法是下面兩種方法。之前是這樣寫是想簡化一下。

2.WebDriverWait()顯示等待

就是設定一個等待時間,直到這個元素出現就停止等待,如果沒出現就丟擲異常。

比如設定10秒等待時間,如果等待第6秒這個元素就出現了,就停止等待,繼續往下執行,如果第10秒元素還沒出現,就丟擲異常。

程式碼如下,使用的WebDriverWait().until()方法,WebDriverWait()裡填driver和要等待的時間,until裡填等待的元素。程式碼演示的是點選猿人學右上角的搜尋按鈕,等待class_name叫search-show的出現為止。

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")
driver.get('https://www.yuanrenxue.com')

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "search-show"))
    )
    element.click()
finally:
    time.sleep(10)
    driver.quit()

3.implicitly_wait()隱式等待

隱式等待是一個全域性設定,設定後所有的元素定位都會等待給定的時間,直到元素出現為止,等待規定時間元素沒出現就報錯。
因為設定後是所有定位都要等待,所以最好用顯示等待。
隱式等待的呼叫方法是:

#coding=utf-8
from selenium import webdriver

driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")

#等待5秒
driver.implicitly_wait(5)

driver.get('https://www.yuanrenxue.com')
driver.find_element_by_class_name('slide-left').click()

driver.quit()

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章