码迷,mamicode.com
首页 > 其他好文 > 详细

Selenium 页面加载慢

时间:2019-07-19 20:23:58      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:方式   strategy   解析   from   问题   The   document   implicit   方法   

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

 

Selenium 页面加载慢

标签:方式   strategy   解析   from   问题   The   document   implicit   方法   

原文地址:https://www.cnblogs.com/wodeboke-y/p/11215412.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!