selenium顯示等待和隱式等待的區(qū)別
1嫡丙、隱式等待
隱式等待恩袱,就是在創(chuàng)建driver時夫晌,設(shè)置全局元素等待超時時間雕薪。當要查找元素,而這個元素沒有馬上出現(xiàn)時晓淀,告訴 WebDriver 查詢 Dom 一定時間所袁,實際上瀏覽器會在你自己設(shè)定的時間內(nèi)不斷的刷新頁面去尋找我們需要的元素。默認值是 0,但是設(shè)置之后凶掰,這個時間將在WebDriver 對象實例整個生命周期都起作用燥爷。(處理 Table 對象時,需要將此設(shè)置為默認值)
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
設(shè)置等待時長為10秒懦窘,首先這10秒并非一個固定的等待時間前翎,它并不影響腳本的執(zhí)行速度。其次畅涂,它并不針對頁面上的某一元素進行等待港华。當腳本執(zhí)行到某個元素定位是,如果元素可以定位午衰,則繼續(xù)執(zhí)行立宜,如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到臊岸。假設(shè)在第六秒定位到了元素則繼續(xù)執(zhí)行橙数,若直到超出設(shè)置的時長10秒還沒有定位到元素,則拋出異常帅戒。
2灯帮、顯示等待
每隔一段時間檢測一次當前頁面元素是否存在,如果超過設(shè)置時間檢測不到則拋出異常(TimeoutException)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
driver = webdriver.Chrome()
driver.get('http://www.baidu')
element = WebDriverWait(driver,5,0.5).util(
expected_conditions.presence_of_element_located((By.ID,'kw'))
)
element.send_keys('hello')
driver.quit()
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:瀏覽器驅(qū)動
timeout:最長超時時間逻住,默認以秒為單位
poll_frequency:檢測的間隔(步長)時間施流,默認為0.5S
ignored_exceptions:超時后的異常信息,默認情況下拋NoSuchElementException異常
WebDriverWait()一般由until()或 until_not()方法配合使用
until(method, message=' '):調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù)鄙信,直到返回值為True
until_not(method, message=' '):調(diào)用該方法提供的驅(qū)動程序作為一個參數(shù)瞪醋,直到返回值為False