去定位肯定是定位不到的,所以我們需要用到了『等待』,該如何使用等待呢,讓我們一起來**一下吧!
time.sleep()強制等待time模組,是python專門用來處理時間的內建庫。
我們可以使用它時需要匯入 import time
time.sleep(2) 意思是強制休眠2秒種的時間
這樣等待的弊端是,我們已經定位到元素的時候,還會繼續等待,導致我們工作效率很低 所以webdriver提供了兩種型別的等待:隱式等待和顯式等待
implicitly_wait()隱式等待該方法來實現隱式等待,預設引數的單位為秒,如裡面的引數設定等待時長為10秒。
當指令碼執行到某個元素定位時,如果元素可以定位,則繼續執行;
如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第6秒定位到了元素則繼續執行,
若直到超出設定時長(10秒)還沒有定位到元素,則丟擲異常
該等待設定完是對整個全域性起作用,所以只需設定一次即可,不需要匯入任何模組,直接使用
webdriverwait():顯式等待是針對於某個特定的元素設定的等待時間,在設定時間內,預設每隔0.5時間檢測一次特定的元素是否存在,
如果在設定的時間內找到了元素,則直接執行。如果超過設定最長等待時間檢測不到則丟擲異常。
預設檢測頻率為0.5s,預設丟擲異常為:nosuchelementexception。
該方法需要匯入by 、webdriverwait 、expected_conditions
下面的**是對三種等待的具體例子:
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 as ec
import time
driver=webdriver.chrome() driver.implicitly_wait(5) #隱式等待
driver.get('')
time.sleep(3) #強制等待
driver.find_element_by_id('kw').send_keys('川普')
#每隔0.5秒檢查一次(預設就是0.5秒。也可以修改),最多等待10秒,直到找到id="su"元素就執行,否則丟擲異常
element=webdriverwait(driver,10,0.5).until(ec.visibility_of_element_located((by.id,'su'))) #顯式等待
element.click()
time.sleep(2)
driver.quit()
補充一點
presence_of_element_located 檢查元素是否存在,但是並不一定可見。
visibility_of_element_located 檢查元素存在,並且可見於頁面,也就是能定位到它
Selenium強制等待 顯式等待 隱式等待的區別
學習這一章的時候,無法清楚的了解到顯式等待與隱式等待的區別。這一篇講得挺清楚的 為什麼需要設定元素等待?usr bin env python coding utf 8 title time 2020 3 25 17 52 author 小菠蘿測試筆記 blog from time import sl...
顯式等待 隱式等待
現在的網頁越來越多採用了 ajax 技術,這樣程式便不能確定何時某個元素完全載入出來了。如果實際頁面等待時間過長導致某個dom元素還沒出來,但是你的 直接使用了這個webelement,那麼就會丟擲nullpointer的異常。為了避免這種元素定位困難而且會提高產生 elementnotvisibl...
定時器 強制等待 顯式等待和隱式等待
1.強制等待 time.sleep 單位s。等待時,程式停止執行,直到設定的等待時間結束。當等待時間設定為5s或者以上時,程式執行會報錯。2.隱式等待 device a.implicitly wait 5 單位s.在設定等待時間內,程式一直在嘗試查詢元素,直到超時結束。此項設定,全域性有效。3.顯式...