selenium 設置元素等待


webdriver 有2種等待方式:顯式等待和隱式等待

顯式等待

定義:使webdriver等待某個條件成立時繼續執行,否則達到最大時長時拋出異常

WebdriverWait類是由WebDriver 提供的等待方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,如果超過設置時間檢測不到則會拋出異常。

格式如下:

WebDriverWait(driver,timeout,poll_frequency = 0.5,ignored_exceptions = None)
  • driver:瀏覽器驅動
  • timeout:最長超時時間默認以秒為單位
  • poll_frequency:檢測的間隔時間,默認為0.5S
  • ignored_exceptions:超時后的異常信息,默認情況下拋出NoSuchElementException異常

WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的說明。

  • until(method,message  = ''+3)

調用該方法提供的驅動程序為一個參數,知道返回值為False

在以下示例中,通過as關鍵字將excepected_conditions重命名為EC,並調用presence_of_element_located()方法判斷元素是否存在。

 

 1 #-*-coding:utf-8 -*-
 2 print("hello,world")
 3 from selenium import webdriver
 4 from selnium.webdriver.common.by import By
 5 from selnium.webdriver.support.ui import webdriverWait
 6 from selenium.webdriver.support import expected_conditions as EC
 7 
 8 driver = webdriver.Firefox()
 9 driver.get('http://www.baidu.com')
10 
11 element = webdriverWait(driver,5,0.5).until(
12                         EC.presence_of_element_located((By.ID,'kw'))
13                         )
14 element.send_keys('selenium')
15 driver.quit()

隱式等待

WebDriver提供了implicitly_wait()方法來實現隱式等待,默認設置為0,用法相對簡單。

 1 #隱式等待
 2 from selenium import webdriver
 3 from selenium.common.exceptions import NoSuchElementException
 4 from time import ctime
 5 
 6 driver = webdriver.Firefox()
 7 
 8 #設置隱式等待為10s
 9 driver.implicitly_wait(10)
10 driver.get("http://www.baidu.com")
11 try:
12     print(ctime())
13     driver.find_element_by_id('kw22').send_keys('selenium')
14 except NoSuchElementException as e:
15     print(e)
16 
17 finally:
18     print(ctime())
19     driver.quit()

 

implicitly_wait()默認參數的單位為秒,延時等待是在設定好的時間內,不斷進行元素定位(輪詢),定位到了就繼續執行,定位不到則在設定的時間后拋出異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM