文章目錄
- 初學selenuim記錄
- 1、執行driver = webdriver.Chrome()后很久才打開瀏覽器
- 2、瀏覽器多元素定位 $x(‘xpath語法’)
- 3、打開瀏覽器driver.get("網址")執行了很久才開始定位元素:等待
- (1)driver.set_page_load_timeout(t)
- (2)WebDriverWait()
初學selenuim記錄
1、執行driver = webdriver.Chrome()后很久才打開瀏覽器
尚未解決,一會很快打開一會很慢打開
2、瀏覽器多元素定位 $x(‘xpath語法’)
console里面調試xpath 定位的語法是 :$x()
在console里面通過 $x(‘xpath語法’) 可以確定 xpath 語法是否寫正確,方便報錯時排查問題
# //*[@id="leftcolumn"]/a[1]
# //*[@id="leftcolumn"]/a[2]
# //*[@id="leftcolumn"]/a[3]
# console里面調試xpath 定位的語法是 :$x() ;
# 在console里面通過 $x(‘xpath語法’) 可以確定 xpath 語法是否寫正確,方便報錯時排查問題
# $x('//*[@id="leftcolumn"]/a') (74)
3、打開瀏覽器driver.get(“網址”)執行了很久才開始定位元素:等待
selenium元素操作等方法是需要等待頁面所有元素完全加載完成后才開始執行的,所以在頁面未完成加載前,代碼會一直等待頁面加載不繼續執行。
(1)driver.set_page_load_timeout(t)
解決辦法參考資料:
【selenium】解決頁面加載時間過長問題
解決 selenium 加載網頁阻塞的問題
- 設置等待時間:driver.set_page_load_timeout(0.1)
- 超時即拋出異常:try: except TimeoutException:
- 超時后執行Javascript停止頁面加載:driver.execute_script(‘window.stop()’)
# 設置WebDriver的頁面加載時間(set_page_load_timeout),
# set_page_load_timeout(time) 方法可以設置頁面的加載超時時間
# 在頁面加載超出設置時間時會報錯,Timed out receiving message from renderer: time
driver.set_page_load_timeout(5) # 設置頁面加載時間miao
PrintTime.NowTime("控制瀏覽器,訪問頁面")
start = time.time()
try:driver.get("https://www.runoob.com/html/html-tutorial.html") # 控制測覽器,訪問
except TimeoutException:# 超時后執行Javascript停止頁面加載PrintTime.NowTime("Time Out")driver.execute_script('window.stop()')
# 顯示等待:WebDriverWait()
WebDriverWait(driver, 5, 0.1).until(lambda x: x.find_element_by_id('kw'))
print('the page is loaded')
end = time.time()
# 計算頁面加載時間
print(end - start)
# 設置頁面加載時間的方式只適用于使用 get() 方式打開網頁,如果是通過操作進行跳轉的頁面不適用
(2)WebDriverWait()
解決辦法參考資料:
webdriver中的等待——主要講解WebDriverWait()
- 顯示等待:WebDriverWait()
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:瀏覽器驅動
timeout:最長超時時間,默認以秒為單位
poll_frequency:檢測的間隔步長,默認為0.5s
ignored_exceptions:超時后的拋出的異常信息,默認拋出NoSuchElementExeception異常。
- 與until()或者until_not()方法結合使用
WebDriverWait(driver,10).until(method,message="")
在設置時間(10s)內,等待后面的條件發生。如果超過設置時間未發生,則拋出異常。在等待期間,每隔一定時間(默認0.5秒),調用until或until_not里的方法,直到它返回True或False.
- 匿名函數:lambda
# lambda 形式參數 : 函數表達式
sum_1 = lambda arg1, arg2: arg1 + arg2
# lambda是一個表達式,可以被命名,其中arg1, arg2是形式參數,arg1 + arg2 函數表達式
sum_1(1,2)
# 返回結果 3
等待時間為10秒,每0.5秒檢查一次,然后使用匿名函數等待直到找到id為’kw’的元素
# 設置等待
wait = WebDriverWait(driver,10,0.5)
# 使用匿名函數
# lambda x: x2 表示一個接受參數x并返回x2的匿名函數
wait.until(lambda diver:driver.find_element_by_id('kw'))