受頁面加載速度的影響,常常報「Unable to locate element」的錯誤。
爲了保證腳本運行的穩定性,須要腳本中添加等待時間。 ####1.sleep()-----固定休眠 sleep():設置固定休眠時間。 python的time包提供了休眠方法sleep() ,導入time包後就能夠使用sleep()進行腳本的執行過程進行休眠。python
#import time time.sleep(3) #休眠3秒
####2.implicitly_wait()-----隱式等待 implicitly_wait():是 webdirver 提供的一個超時等待。隱式等待一個元素被發現,或一個命令完成。 若是超出了設置時間的則拋出異常。
####舉個栗子:implicitly_wait(10)
這10秒並不是一個固定的等待時間,且不針對頁面上的某個元素進行等待。當腳本指定到某個元素定位時,如元素可定位,則繼續執行;若是元素定位不到,則將以輪詢的方式不斷地判斷元素是否被定位到。假設在第5秒定位到了某元素則繼續執行,如超出了設置的10秒,則拋出異常NoSuchElementException。web
from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import NoSuchElementException driver.implicitly_wait(20) #等待20秒
####3.WebDriverWait()-----顯式等待 WebDriverWait():也是 webdirver 提供的方法。在設置時間內,默認每隔一段時間檢測一次當前 頁面元素是否存在,若是超過設置時間檢測不到則拋出異常。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驅動程序(Ie, Firefox, Chrome 或遠程),瀏覽器驅動
timeout - 最長超時時間,默認以秒爲單位
poll_frequency - 休眠時間的間隔(步長)時間,默認爲 0.5 秒
ignored_exceptions - 超時後的異常信息,默認狀況下拋 NoSuchElementException 異常。瀏覽器
WebDriverWait方法通常要和until或until_not()方法配合使用
好比:ui
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions #等到該元素顯示後才執行下一步 element = WebDriverWait(self.driver,10)\ .until(expected_conditions.element_to_be_clickable((By.LINK_TEXT,u'拒絕')))