最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python selenium如何設(shè)置等待時間

 更新時間:2016年09月15日 13:52:17   作者:kelanmomo  
這篇文章主要為大家詳細(xì)介紹了Python selenium如何設(shè)置等待時間,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

我們前面介紹的Selenium的WebDriver測試方法是基于網(wǎng)頁來進(jìn)行的。之前的例子都是用簡單的網(wǎng)頁來操作,可能體會不到網(wǎng)頁的加載過程,但實際應(yīng)用過程中,網(wǎng)頁加載是要消耗一定的時間的。你的腳本已經(jīng)開始運(yùn)行,但你要定位的元素卻還沒加載出來,此時就會報出一個找不到元素的錯誤。顯然,沒有考慮加載時間的腳本不是一個成功的腳本。今天我們就來介紹一下如何設(shè)置等待時間。

等待的三種方法

time.sleep(n)

強(qiáng)制等待n秒。Python本身的函數(shù),包含在time包中,使用前需要導(dǎo)入time包。我們之前的實例中經(jīng)常會使用這種等待,方便大家能看清腳本執(zhí)行的結(jié)果。這種等待方法十分笨拙,無論頁面加載得如何,都必須等待n秒,可以說是十分不智能了。

implicitly_wait(n)

最長等待n秒,若n秒內(nèi)頁面加載完成,則提前結(jié)束等待。WebDriver提供的等待方法,也被稱為隱性等待,比強(qiáng)制等待聰明了一點(diǎn),但如果頁面本身包含一個超大視頻之類的文件,就算我們需要定位的元素在最開始已經(jīng)加載出來,卻依舊要等待所有文件加載結(jié)束之后,腳本才能繼續(xù)執(zhí)行,依舊算是有些弊端。

WebDriverWait(n)

最長等待n秒,n秒內(nèi)每隔一段時間去檢查需要定位的元素是否存在,若存在則提前結(jié)束等待。也是WebDriver提供的等待方法,也被稱為顯性等待,這種等待比隱性等待更智能了一些,無視整個頁面的加載,只要需要的元素存在了,就結(jié)束等待。

實例

強(qiáng)制等待在之前例子中都有使用過了,我們就來看一看WebDriver提供的兩種等待方法

隱性等待

其實隱性等待在之前的介紹中也有使用過,但沒有特別提到使用的方法。我們這次來打開網(wǎng)易的首頁,這是一個加載內(nèi)容很多的門戶網(wǎng)站,根據(jù)網(wǎng)速不同,目測大概要10秒左右才能加載完畢,我們把等待時間設(shè)置為60秒,然后計算一下從打開頁面到點(diǎn)擊頁面導(dǎo)航欄中的【公開課】按鈕需要多久。

# coding = utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.implicitly_wait(60) #隱性等待時間60秒
time_start = time.time() #記錄打開頁面時的時間
driver.get('https://www.163.com/')
driver.find_element_by_id('js_love_url').click()
time_end = time.time() #記錄點(diǎn)擊按鈕后的時間
print('access time is : ', time_end - time_start) #打印時間差,即實際消耗時間
time.sleep(2) #強(qiáng)制等待2秒,為了觀察我們確實打開了【公開課】頁面
driver.quit()

腳本執(zhí)行結(jié)束可以看到,雖然我們設(shè)置了隱性時間為60秒,但5秒左右(看我下面的執(zhí)行結(jié)果)頁面已加載完畢,可以點(diǎn)擊【公開課】按鈕。下面是我的一次執(zhí)行結(jié)果,顯示了整個加載時間。

>>>access time is : 5.717327117919922

顯性等待

顯性等待使用時需要導(dǎo)入selenium.webdriver.support.wait.WebDriverWait類,API如下:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
  • driver:不用說了,你定義的WebDriver瀏覽器(Chrome,F(xiàn)irefox等)
  • timeout:最長等待時間,單位為秒
  • poll_frequency:間隔查找元素的時間,默認(rèn)為0.5秒(不設(shè)定就是0.5秒),也就是說默認(rèn)0.5秒去查看一次要查找的元素是否存在,找到了就結(jié)束整個顯性等待,否則繼續(xù)等待0.5秒再查找一次
  • ignored_exceptions=None:超時發(fā)送的異常信息,默認(rèn)發(fā)送NoSuchElementException

由于顯性等待可能需要確認(rèn)元素是否存在,一般還要配合以下兩個方法使用

until(method, message='')
until_not(method, message='')
  • method:until()的method意為將驅(qū)動程序提供的方法作為參數(shù)調(diào)用,直到返回為not False,until_not()的method就是直到返回為False
  • message:超時傳的異常信息

注意,method()必須是可調(diào)用的方法,要有__call__()方法。上面的例子,我們重新寫一下。

# coding = utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

driver = webdriver.Chrome()
class button():
 def __call__(self, driver):
  if driver.find_element_by_id('js_love_url'):
   return True
  else:
   return False

driver.implicitly_wait(60)
time_start = time.time()
driver.get('https://www.163.com/')

# driver.find_element_by_id('js_love_url').click()
WebDriverWait(driver,2,0.5).until(button()) 
time_end = time.time()
print('access time is : ', time_end - time_start)
time.sleep(2)
driver.quit()

看完這個例子可能會有疑問,我顯性等待明明設(shè)置了是2秒,為什么沒有報錯呢。因為我們同時也設(shè)置了隱性等待時間,兩者時間取最長的等待時間為實際等待時間,因此在這里例子里,等待的時間還是60秒。

總結(jié)

1、Selenium可以采取三種等待,最智能的為顯性等待WebDriverWait()
2、隱性等待和顯性等待同時存在時,取兩者中最長的等待時間為有效等待時間
3、顯性等待中的until(method())的method()為可調(diào)用方法,可以自己定義,也可以用匿名函數(shù)等方法,這個我們以后細(xì)談
4、隱性等待設(shè)置一次,即貫穿整個腳本始終,強(qiáng)制等待則必須在每個需要等待之處設(shè)置

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python post請求實現(xiàn)代碼實例

    Python post請求實現(xiàn)代碼實例

    這篇文章主要介紹了Python post請求實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Python自然語言處理詞匯分析技術(shù)實戰(zhàn)

    Python自然語言處理詞匯分析技術(shù)實戰(zhàn)

    這篇文章為大家介紹了Python自然語言處理詞匯分析技術(shù)實戰(zhàn),主要對詞匯分析進(jìn)行介紹,一些語言方面的基礎(chǔ)知識(詞性、詞語規(guī)范化),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2024-01-01
  • python按順序重命名文件并分類轉(zhuǎn)移到各個文件夾中的實現(xiàn)代碼

    python按順序重命名文件并分類轉(zhuǎn)移到各個文件夾中的實現(xiàn)代碼

    這篇文章主要介紹了python按順序重命名文件并分類轉(zhuǎn)移到各個文件夾中,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • python3爬蟲中異步協(xié)程的用法

    python3爬蟲中異步協(xié)程的用法

    在本篇文章里小編給大家整理的是關(guān)于python3爬蟲中異步協(xié)程的用法,需要的朋友們可以學(xué)習(xí)參考下。
    2020-07-07
  • 詳解python實現(xiàn)線程安全的單例模式

    詳解python實現(xiàn)線程安全的單例模式

    這篇文章主要介紹了python實現(xiàn)線程安全的單例模式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Pyhton模塊和包相關(guān)知識總結(jié)

    Pyhton模塊和包相關(guān)知識總結(jié)

    文中詳細(xì)整理了關(guān)于Python模塊和包的相關(guān)知識點(diǎn),剛?cè)腴TPython的小伙伴們可以學(xué)習(xí)一下,有助于加深Python基礎(chǔ)的理解.而且有詳細(xì)說明及代碼示例,需要的朋友可以參考下
    2021-05-05
  • Python 2.7中文顯示與處理方法

    Python 2.7中文顯示與處理方法

    今天小編就為大家分享一篇Python 2.7中文顯示與處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python中venv虛擬環(huán)境超詳細(xì)講解

    Python中venv虛擬環(huán)境超詳細(xì)講解

    虛擬環(huán)境是一個獨(dú)立的Python環(huán)境,它與系統(tǒng)的全局Python環(huán)境隔離,這篇文章主要介紹了Python中venv虛擬環(huán)境的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Pytorch中torch.nn.Softmax的dim參數(shù)用法說明

    Pytorch中torch.nn.Softmax的dim參數(shù)用法說明

    這篇文章主要介紹了Pytorch中torch.nn.Softmax的dim參數(shù)用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python selenium如何打包靜態(tài)網(wǎng)頁并下載

    Python selenium如何打包靜態(tài)網(wǎng)頁并下載

    這篇文章主要介紹了Python selenium如何打包靜態(tài)網(wǎng)頁并下載,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論

武定县| 华安县| 蒲江县| 瑞安市| 新民市| 东台市| 武汉市| 寻乌县| 博湖县| 凤山县| 宁国市| 平武县| 色达县| 景泰县| 龙口市| 胶南市| 读书| 金溪县| 乌苏市| 交口县| 绿春县| 华亭县| 祁门县| 荃湾区| 吉隆县| 陆丰市| 当阳市| 文山县| 安龙县| 怀柔区| 林甸县| 余干县| 蒙山县| 武威市| 宜章县| 静宁县| 全椒县| 白玉县| 陕西省| 惠安县| 井陉县|