selenium的等待~
阿新 • • 發佈:2018-11-13
既然使用了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(可執行方法, 超時時返回的資訊)