為什么要設定元素等待?
當你的網路慢的時候,打開網頁慢,網頁都沒完全打開,代碼已經在執行了,但是沒找到你定位的元素,此時python會報錯,
當你的瀏覽器或電腦反應慢,網頁沒完全打開,代碼已經在執行了,但是沒找到你定位的元素,此時python也會報錯,
由于代碼執行很快,而由于各方面的原因導致python代碼報錯,所以才要設定元素等待,是根據你的網速或電腦的情況而定來設定等待時間,沒有一成不變的設定,這個需要注意,
1.sleep 強制等待
代碼如下
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
sleep(2) #設定等待2秒鐘
dr.get('http://www.baidu.com')
優點:代碼簡潔,不啰嗦,
缺點:假如你設定sleep等待時間太短,元素沒加載出來,程式照樣報錯,倘若你設定sleep等待時間設定太長,元素可能已經加載出來了,但是由于你設定過長,程式會一直等待你設定的時間過完才執行,這樣會影響代碼整體的運行效率,
2.implicitly_wait() 隱性等待
代碼如下:
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
dr.implicitly_wait(20) #設定等待20秒鐘
dr.get('http://www.baidu.com')
dr.find_element_by_id('kw').send_keys('shawn')
dr.find_element_by_id('su').click()
優點:
1.代碼簡潔,
2.在代碼前部分加implicitly_wait() ,整個的程式運行程序中都會有效,都會等待元素加載完成,不需要像sleep一樣每次要設定一遍,
3.在設定的時間內沒有加載到整個頁面,則會報NosuchElementError,如果元素在第20s被加載出來,自動執行下面的腳本,不會一直等待20s,
缺點:非要加載到整個頁面才執行代碼,這樣影響代碼的執行效率,一般情況下,我們想要的結果是只需加載到了我要定位的元素就執行代碼,不需要等待整個頁面的完全加載出來再執行代碼,
3.WebDriverWait() 顯示等待
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait #WebDriverWait注意大小寫
from selenium.webdriver.common.by import By
dr = webdriver.Chrome()
dr.get('http://www.baidu.com')
try:
element = WebDriverWait(dr,10).until(EC.presence_of_element_located((By.ID,'kw')))
element.send_keys('123')
dr.find_element_by_id('su').click()
except Exception as message:
print('元素定位報錯%s'%message)
finally:
pass
優點:代碼執行效率快,無需等待整個頁面加載完成,只需加載到你要定位的元素就可以執行代碼,是最智能的設定元素等待的方式,
缺點:
1.要匯入from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
必須要匯入以上3個包,導包路徑相當的復雜,啰嗦而且麻煩
2.寫等待時間的代碼也是復雜,步驟稍微有點多,
element=WebDriverWait(dr,10).until(EC.presence_of_element_located((By.ID,‘kw’)))
element.send_keys(‘123’)
看完點贊 ~養成好習慣,以上內容希望對你有幫助,如果對軟體測驗、介面測驗、自動化測驗、面試經驗交流感興趣可以加入我們,642830685,免費領取最新軟體測驗大廠面試資料和Python自動化、介面、框架搭建學習資料!技術大牛解惑答疑,同行一起交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/184368.html
標籤:其他
上一篇:企業禁止用遠控軟體
