1. 程式人生 > 實用技巧 >Selenium 中 強制等待、顯示等待、隱式等待的區別

Selenium 中 強制等待、顯示等待、隱式等待的區別

設定元素等待

為什麼需要設定元素等待?

  • 因為,目前大多數Web應用程式都是使用Ajax和Javascript開發的;每次載入一個網頁,就會載入各種HTML標籤、JS檔案
  • 但是,載入肯定有載入順序,大型網站很難說一秒內就把所有東西加載出來,不僅如此,載入速度也受網路波動影響
  • 因此,當我們要在網頁中做元素定位的時候,有可能我們打開了網頁但元素未加載出來,這個時候就定位不到元素,就會報錯
  • 所以,我們需要設定元素等待,意思就是:等待指定元素已被加載出來之後,我們才去定位該元素,就不會出現定位失敗的現象了

1、強行等待 設定固定的執行緒休眠時間

from selenium import webdriver

import time driver = webdriver.Chrome() # 訪問網址 driver.get('http://www.baidu.com') # 強行等待10秒 time.sleep(10) # 去搜索 input=driver.find_element_by_id("kw")

2、顯示等待

  是單獨針對某個元素,設定一個等待時間如10秒,每隔0.5秒檢查一次是否出現,如果在5秒之前任何時候出現,則繼續向下,超過5秒尚未出現則拋異常。

from selenium import webdriver

#載入驅動
from selenium.webdriver.common.by import
By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() # 訪問網址 driver.get('http://www.baidu.com') # 顯示等待 # 設定等待例項,最多等待10,每0.5秒檢視條件是否成立 element=WebDriverWait(driver,10,0.5).until( # 條件:直到元素載入完成 EC.presence_of_element_located((By.ID,"
kw")) ) # 去搜索 input=driver.find_element_by_id("kw")

3、隱式等待

  隱式等待是全域性的是針對所有元素,設定等待時間如10秒,如果10秒內出現,則繼續向下,否則拋異常。可以理解為在10秒以內,不停重新整理看元素是否加載出來。

from selenium import webdriver

driver = webdriver.Chrome()

# 訪問網址
driver.get('http://www.baidu.com')

# 隱式等待10秒
driver.implicitly_wait(10)

# 去搜索
input=driver.find_element_by_id("kw")