Selenium 頁面加載慢


Selenium 頁面加載慢

問題描述:

使用Selenium獲取網頁,發現webdriver.get方法會阻塞直到網頁全部加載完成,官方提供的三種wait方法僅對網頁的ajax有比較明顯的效果。對於部分網頁,網頁中所需要的元素很快就能加載完成,但是整個頁面加載完成卻需要很久,所以如何才能使得網頁在加載完所需要元素后即停止。

 

問題解決:

pageLoadStrategy設置(推薦)

For commands that cause a new document to load, the point at which the command returns is determined by the session’s page loading strategy.

上面這段話的大致意思是,對於一個新加載的dom,頁面什么時候開始接受命令由頁面的加載策略決定,也就是說,我們通過修改頁面加載策略,可以使頁面即使處於加載中,也能接受我們的命令,從這點可以解決webdriver.get的阻塞問題。而每類webdriver都有一個對應的配置文件放在特定的類DesiredCapabilities里面,通過修改里面的pageLoadStrategy,可以使webdriver的頁面加載策略發生改變。

 

from selenium import webdriver

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from selenium.webdriver.support.ui import WebDriverWait

 

desired_capabilities = DesiredCapabilities.CHROME  # 修改頁面加載策略

desired_capabilities["pageLoadStrategy"] = "none"  # 注釋這兩行會導致最后輸出結果的延遲,即等待頁面加載完成再輸出

 

driver = webdriver.Chrome('browsers/chromedriver.exe')

wait = WebDriverWait(driver, 10)  #后面可以使用wait對特定元素進行等待

 

driver.get('http://qzone.qq.com/')

# some code to work.

 

print("Reach end.")

上面我們可以看到,將頁面加載策略修改為none之后,頁面即使在加載過程中,程序也可以繼續執行。代碼中的pageLoadStrategy屬性可以設置為以下三種屬性:

normal

即正常情況下,selenium會等待整個界面加載完成(指對html和子資源的下載與解析,不包括ajax)

eager

要等待整個dom樹加載完成,即DOMContentLoaded這個事件完成,僅對html的內容進行下載解析

none

當html下載完成之后,不等待解析完成,selenium會直接返回

 

上面的代碼用了最后一種解析方式——none,不作等待,直接返回,然后在后面的代碼中可以用explicit_wait或者implicit_wait等方式來對特定元素進行等待捕獲。

 

總結

  1. 不建議使用eager模式,會導致browser沒有生成,返回異常;
  2. 使用none模式相當於生成了dom,但不加載其它文件(圖片等)。

 

問題:

DOMContentLoaded事件

http://www.softwhy.com/article-9783-1.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM