1. 程式人生 > >selenium的等待~

selenium的等待~

既然使用了selenium,那麼必然犧牲了一些速度上的優勢,但由於公司網速不穩定,導致頻頻出現載入報錯,這才意識到selenium等待的重要性。

說到等待又可以分為3類,

1.強制等待

time.sleep(3)

 但是有一個問題,既然已知網速不穩定,那這個sleep的秒數如何確定,難道sleep max(最差的網路狀態),顯得有一些死板了。

2.隱形等待

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(30)  # 隱性等待,最長等30秒
driver.get('https://www.baidu.com')

 即設定最大等待時間,如果網頁全部載入完畢,則執行下一步,如果30秒還未載入完成,那麼就不管了,後續xpath,css提取必定會提取失敗。就必須加一個異常處理。

3.顯性等待

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

driver = webdriver.Firefox()
driver.implicitly_wait(10)  # 隱性等待和顯性等待可以同時用,但要注意:等待的最長時間取兩者之中的大者
driver.get('https://www.baidu.com')
locator = (By.LINK_TEXT, 'CSDN')

try:
    WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) # 20:等待最長時間 0.5:呼叫until或until_not間隔
    print(driver.find_element_by_link_text('CSDN').get_attribute('href'))
finally:
    driver.close()

 

$ WebDriverWait(driver, 超時時長, 呼叫頻率, 忽略異常).until(可執行方法, 超時時返回的資訊)