1. 程式人生 > >selenium之網頁等待時間

selenium之網頁等待時間

1、為什麼需要設定等待時間:

因為網頁開啟後需要載入對應的資原始檔,頁面渲染,視窗處理等等,我們需要等網頁開啟穩定後才能準確的進行後面的定位等操作

2、等待的分類

(1)強制等待

from time import sleep 

sleep(3)  #強制等待5秒後才進行下一步操作;缺點是不管資源是否載入完成,都一直等5秒,會造成浪費;常用於自己除錯程式碼看效果

(2)隱性等待:設定一個最長等待時間,如果規定時間內頁面載入完成則立即執行下一步操作,否則一直等到時間截止,然後才執行下一步

缺點:程式會一直等待這個頁面載入完成,到瀏覽器標籤蘭那個載入圈不在轉圈為止

driver.implicitl_wait(10)  #隱性等待,最長10秒

注意:對driver起作用,所以只用設定一次就可以了,不用每次都設定

(3)顯性等待

a:需要WebDriverWait配合使用

b:until和until_not,程式每隔N秒檢查一次,如果成功,則執行下一步,否則繼續等待,直到超過設定的最長等待時間

c:語法

from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

例子:
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

driver = webdriver.Firefox()
url = "https://baidu.com"
driver.get(url)

#隱性等待
driver.implicitly_wait(10) # 隱性等待,最長等10秒

#x顯性等待
try:
ele = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))
ele.send_keys("杭州天氣")
print("資源載入成功")
print(driver.title)
except:
print("資源載入失敗")
finally:
print("資源清理")
#退出瀏覽器
driver.quit()

注:

(1)EC.presence_of_element_located()是確認元素是否已經出現了
(2)顯性等待和隱性等待可以同時使用,等待的最長時間取兩者之中的較大者