selenium 設置元素等待
阿新 • • 發佈:2019-01-24
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 設置元素等待