1. 程式人生 > >selenium 設置元素等待

selenium 設置元素等待

spa 定義 調用 str frequency finally red 參數 implicit

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()默認參數的單位為秒,延時等待是在設定好的時間內,不斷進行元素定位(輪詢),定位到了就繼續執行,定位不到則在設定的時間後拋出異常。

selenium 設置元素等待