欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python爬蟲之設(shè)置selenium webdriver等待

系統(tǒng) 1803 0

Python爬蟲之設(shè)置selenium webdriver等待

?

ajax技術(shù)出現(xiàn)使異步加載方式呈現(xiàn)數(shù)據(jù)的網(wǎng)站越來越多,當(dāng)瀏覽器在加載頁面時,頁面上的元素可能并不是同時被加載完成,這給定位元素的定位增加了困難。

如果因?yàn)樵诩虞d某個元素時延遲而造成ElementNotVisibleException(不可見元素異常)的情況出現(xiàn),那么就會降低自動化腳本的穩(wěn)定性,設(shè)置元素等待可改善這種問題造成的不穩(wěn)定。

一、強(qiáng)制等待

?強(qiáng)制等待是利用python語言自帶的time庫中的sleep()方法:

            
              from
            
             selenium 
            
              import
            
            
               webdriver

            
            
              from
            
             time 
            
              import
            
            
               sleep


            
            
              def
            
            
               test():
    
            
            
              #
            
            
              打開瀏覽器
            
            
    driver =
            
               webdriver.Firefox()
    driver.get(
            
            
              '
            
            
              http://www.baidu.com
            
            
              '
            
            
              )
    sleep(5
            
            
              )
    driver.quit()
            
          

sleep(5)會掛起這個腳本,五秒后再繼續(xù)執(zhí)行,但是這種方式會導(dǎo)致這個腳本運(yùn)行時間過長,不到萬不得已盡可能少用,特殊情況下,時間設(shè)置最好不超過1秒,一般0.5秒。

二、隱式等待

隱式等待:在腳本中我們一般看不到等待語句,但是它會在每個頁面加載的時候自動等待;隱式等待只需要聲明一次,一般在打開瀏覽器后進(jìn)行聲明。聲明之后對整個drvier的生命周期都有效,后面不用重復(fù)聲明。?

設(shè)置一定的時長等待頁面上某元素加載完成,如果超出了設(shè)置的時長元素還沒有被加載,則拋出NoSuchElementException異常,沒有超過規(guī)定時間就繼續(xù)往下執(zhí)行,WebDriver提供了implicitly_wait()方法來實(shí)現(xiàn)隱式等待,默認(rèn)設(shè)置為0:

            
              from
            
             selenium 
            
              import
            
            
               webdriver


            
            
              def test
            
            
              ():
    
            
            
              #
            
            
              打開瀏覽器
            
            
    driver =
            
               webdriver.Firefox()
    
            
            
              #
            
            
              隱式等待 設(shè)置等待時間為10秒
            
            
    driver.implicitly_wait(10
            
              )
    driver.get(
            
            
              '
            
            
              http://www.baidu.com
            
            
              '
            
            )
          

注意:隱式等待中,如果元素在規(guī)定時間內(nèi)加載出來,也得繼續(xù)等待到規(guī)定的時間結(jié)束。

?

三、顯示等待

顯示等待:顯示等待必須在每個需要等待的元素前面進(jìn)行聲明。

            
              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


            
            
              def
            
            
               test():
    
            
            
              #
            
            
              打開瀏覽器
            
            
    driver =
            
               webdriver.Firefox()
    driver.get(
            
            
              '
            
            
              http://www.baidu.com
            
            
              '
            
            
              )
    
            
            
              #
            
            
              顯示等待
            
            
    element = WebDriverWait(driver,5,0.5).until(ec.presence_of_all_elements_located((By.ID,
            
              "
            
            
              kw
            
            
              "
            
            
              )))
    driver.find_element_by_id(
            
            
              "
            
            
              kw
            
            
              "
            
            ).send_keys(
            
              "
            
            
              selenium
            
            
              "
            
            )
          

顯示等待需要用到兩個類:

WebDriverWait和expected_conditions兩個類。

1、WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

            
              屬性
driver:瀏覽器驅(qū)動
timeout:最長超時時間,默認(rèn)以秒為單位
poll_frequency:檢測的間隔步長,默認(rèn)為0.5s
ignored_exceptions:超時后的拋出的異常信息,默認(rèn)拋出NoSuchElementExeception異常。
            
          

WebDriverWait()一般由until()或until_not()方法配合使用,下面是方法說明 :

            until(method,message=
            
              ”) 
method: 在等待期間,每隔一段時間(
            
            
              __init__中的poll_frequency
            
            
              )調(diào)用這個傳入的方法,直到返回值不是False
message: 如果超時,拋出TimeoutException,將message傳入異常
until_not(method,message
            
            =
            
              ”) 
 與until相反,until是當(dāng)某元素出現(xiàn)或什么條件成立則繼續(xù)執(zhí)行,
 until_not是當(dāng)某元素消失或什么條件不成立則繼續(xù)執(zhí)行,參數(shù)也相同。
            
          

?

2、expected_conditions類

各種類,達(dá)到某種條件,返回True和False

常用條件:

            
              ? ? ? ? ? ? ? ? ? ? ? ?條件    ? ? ? ? ? ? ? ? ? ? ? ? 說明
presence_of_element_located      判斷某個元素是否被加到了DOM樹里,并不代表該元素一定可見
visibility_of_element_located     判斷某個元素是否可見,可見代表元素非隱藏,并且元素的寬和高都不等于0
            
          

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一区二区三区 | 美日韩一区二区 | 国产欧美日韩精品一区二 | 日日夜夜天天久久 | 久久免费精品视频在线观看 | 久久国产欧美日韩精品 | 日韩精品视频在线播放 | 久久综合久久精品 | 黄色免费av | 中文字幕在线免费视频 | 欧美视频网站 | 新视觉yy6080午夜毛片 | 一级在线观看 | 羞羞色院91蜜桃在线观看 | 久久久久中文字幕 | 一区二区三区日韩在线观看 | 色婷婷综合久久久中文字幕 | 久久国内精品 | 毛片免费看电影 | 欧美一区黄 | 日韩欧美亚洲 | 一区中文字幕 | 国产亚洲综合一区在线 | 亚洲欧美日韩高清一区二区三区 | 一区二区三区免费在线观看 | 免费看一级欧美毛片视频 | 亚洲欧美综合精品久久成人 | 日韩在线欧美 | 免费综合网| 久久国产亚洲观看 | 国产午夜精品久久久久小说 | 亚洲欧洲成人 | 欧美特黄a级高清免费看片 欧美精品一二区 | 欧美日韩视频 | 青青草原在线视频免费观看 | 亚洲国产婷婷香蕉久久久久久99 | 成人欧美一区二区三区黑人3p | 亚洲 欧美日韩 国产 中文 | 日本xxww视频免费 | 国内精品视频 在线播放 | 日韩欧美视频一区 |