亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python爬蟲之設置selenium webdriver等待

系統 1939 0

Python爬蟲之設置selenium webdriver等待

?

ajax技術出現使異步加載方式呈現數據的網站越來越多,當瀏覽器在加載頁面時,頁面上的元素可能并不是同時被加載完成,這給定位元素的定位增加了困難。

如果因為在加載某個元素時延遲而造成ElementNotVisibleException(不可見元素異常)的情況出現,那么就會降低自動化腳本的穩定性,設置元素等待可改善這種問題造成的不穩定。

一、強制等待

?強制等待是利用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)會掛起這個腳本,五秒后再繼續執行,但是這種方式會導致這個腳本運行時間過長,不到萬不得已盡可能少用,特殊情況下,時間設置最好不超過1秒,一般0.5秒。

二、隱式等待

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

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

            
              from
            
             selenium 
            
              import
            
            
               webdriver


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

注意:隱式等待中,如果元素在規定時間內加載出來,也得繼續等待到規定的時間結束。

?

三、顯示等待

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

            
              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:瀏覽器驅動
timeout:最長超時時間,默認以秒為單位
poll_frequency:檢測的間隔步長,默認為0.5s
ignored_exceptions:超時后的拋出的異常信息,默認拋出NoSuchElementExeception異常。
            
          

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

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

?

2、expected_conditions類

各種類,達到某種條件,返回True和False

常用條件:

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

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精选91热在线观看 | 五月婷婷丁香在线视频 | 色黄网站青青草原免费 | 国产精品一区二区三 | 欧美一级毛片日韩一级 | 欧美在线激情视频 | 亚洲九月天| 玖玖爱精品 | 国产精品一区高清在线观看 | 欧美一区二区三区在线观看 | 精品国产乱码一区二区三区麻豆 | 天天躁日日躁狠狠躁综合 | 国产亚洲男人的天堂在线观看 | 久草在线视频精品 | 天天操天天干天天爱 | 亚洲国产成人在线视频 | 伊人成综合 | 久操综合在线 | 99尹人香蕉国产免费天天拍 | 一本伊在人香蕉线观新在线 | 国产精品欧美一区二区三区 | 久久99精品久久久久久噜噜 | 一区二区三区四区视频在线 | 久草青青 | 人人模人人干 | 四虎影视8848a四虎在线播放 | 国产麻豆高清视频在线第一页 | 久久久精品视频免费观看 | 免费黄色一级网站 | 欧美性猛交99久久久久99 | 国产99久9在线| 日韩国产欧美在线观看 | 色老头一区二区三区 | 12至16末成年毛片 | 一区二区视频在线观看免费的 | 午夜毛片 | 天天爱夜夜操 | 99热这里只有精品66 | 国产一区不卡 | 精品久久亚洲 | 国产精选一区二区 |