selenium之顯式等待和隱式等待 休眠

2022-03-23 03:17:49 字數 2967 閱讀 9344

為什麼要等待:需要的元素尚未載入出來(原因可能有:網速慢、**內容過多),**已經執行到元素位置,此時會報錯;為避免這種錯誤,需要使用到等待,等待元素載入出來再執行元素

1、顯式等待

顯式等待是針對於某個特定的元素設定的等待時間

格式:webdriverwait(driver, timeout, poll_frequency=0.5, ignored_exceptions=none)

示例:webdriverwait(driver,10,0.2).until(ec.presence_of_element_located((by.css_selector,'.box-conteny')))

解釋:webdriverwait(driver,10,0.2)意思是:使用瀏覽器driver顯式等待,10秒內,每0.2秒進行一次後面的元素定位,若發現可以定位元素,則跳過,執行下一行**;若元素未載入出來,無法定位,一直等待,等到10秒過後還無法定位則報錯(會卡在這裡,不通過不會執行下一行**);presence_of_element_located()方法作用是判斷後面的元素是否存在

#

顯式等待

#匯入webdriver

from selenium import

webdriver

#匯入by

from selenium.webdriver.common.by importby#

匯入等待類webdriver

from selenium.webdriver.support.ui import

webdriverwait

#匯入預期條件設定類expected_conditions 命名為ec

from selenium.webdriver.support import

expected_conditions as ec

import

time

#建立乙個瀏覽器

driver =webdriver.firefox()

driver.maximize_window()

#訪問**

driver.get('')

#設定顯式等待預置條件

#webdriverwait(driver,10,0.2):使用瀏覽器driver顯式等待,10秒內,每0.2秒進行一次後面的元素定位,若發現可以定位元素,則跳過,執行下一行**;

若元素未載入出來,無法定位,一直等待,等到10秒過後還無法定位則報錯(會卡在這裡,不通過不會執行下一行**)

#until意思是直到,直到後面的條件滿足為止,即10秒內可以定位則跳過,10秒內定位不了則報錯

webdriverwait(driver,10,0.2).until(ec.presence_of_element_located((by.css_selector,'

.box-content

')))

#下拉滾動條

for i in range(5):

js = '

window.scrollto(0,%s)

' % (i*100)

driver.execute_script(js)

time.sleep(0.5)

driver.quit()

顯示等待稍微複雜

2、隱式等待

使用implicitly_wait()方法實現隱式等待,設定的是全域性等待(對頁面的所有元素有效);若設定了隱式等待,執行到元素定位時定位不到元素,會在時間內多處嘗試定位,超過時間則報錯;設定的時間非固定,不影響指令碼執行,不針對某個特定的元素進行等待;指令碼執行到元素定位,可以定位則繼續執行;定位不了則以輪詢的方式不多判斷元素 是否定位到,在時間內定位到則繼續執行;時間內定位不到,則報錯

格式: driver.implicitly_wait(10)

from selenium import

webdriver

#建立乙個瀏覽器物件,設定為最大化螢幕

driver =webdriver.firefox()

driver.maximize_window()

#訪問**

driver.get('

')#下拉滾動條

for i in range(100):

js = '

window.scrollto(0,%s)

' % (i*100)

driver.execute_script(js)

#隱式等待(10秒):隱式並不針對某個元素進行等待,指令碼執行到元素定位時,元素若已經載入出來,可以定位,則不等待,繼續執行;

若元素未載入出來,還不能定位,則等待10秒,10秒內載入出來則繼續執行,載入不出來則報錯

driver.implicitly_wait(10)

#定位元素(此元素需要下拉滾動條,否則不載入出來;若驗證隱式等待的效果,可以注釋下拉操作執行**)

driver.find_element_by_css_selector('

.hotsale-hd > em:nth-child(1)')

#關閉瀏覽器

driver.quit()

3、休眠

time.sleep(2),休眠2秒;此方式需要匯入time模組,屬於強制**休眠

#

匯入模組

from selenium import

webdriver

import

time

#建立瀏覽器,設定為最大化

driver =webdriver.firefox()

driver.maximize_window()

#driver.get('

')#強制休眠2秒

time.sleep(2)

#driver.find_element_by_id('

kw')

顯式等待針對的是某個 特定的元素,需要設定查詢元素是否能被定位到頻率等;隱式等待設定的是全域性,對整個網頁所有元素有效;休眠則強制**休眠時間,顯式和隱式 不休眠,只是等待

Selenium強制等待 顯式等待 隱式等待的區別

學習這一章的時候,無法清楚的了解到顯式等待與隱式等待的區別。這一篇講得挺清楚的 為什麼需要設定元素等待?usr bin env python coding utf 8 title time 2020 3 25 17 52 author 小菠蘿測試筆記 blog from time import sl...

selenium中顯式等待和隱式等待區別

等待 是設定了乙個最長等待時間,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止,然後執行下一步。注意這裡有乙個弊端,那就是程式會一直等待整個頁面載入完成,也就是一般情況下你看到瀏覽器標籤欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就在載入完成了,但是因為個別js之類的...

selenium自學之路 顯式等待,隱式等待

顯示等待 使webdriver等待某個條件成立時繼續執行,否則在達到最大時長時拋棄超時異常 from selenium import webdriver from selenium.webdriver.common.by import by from selenium.webdriver.suppo...