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等方式来对特定元素进行等待捕获。
总结
- 不建议使用eager模式,会导致browser没有生成,返回异常;
- 使用none模式相当于生成了dom,但不加载其它文件(图片等)。
问题:
DOMContentLoaded事件
http://www.softwhy.com/article-9783-1.html
最新文章
- IOC和Aop使用的扩展
- Redis系列二之事务及消息通知
- JS判断是否来自手机移动端的访问,并跳转
- ASP.NET ZERO Core Application 学习笔记
- 树形dp--hdu 3534 Tree
- ARC指南1 - strong和weak指针
- SQL注入原理二
- C# 根据Word模版生成Word文件
- python 在调用时计算默认值
- kafka+storm连接
- static关键字使用
- 第四届CCCC团体程序设计天梯赛 后记
- 一步一步写数据结构(二叉树的建立和遍历,c++)
- robot framework教程-------虫师
- Singer 学习五 docker 运行说明
- DouPHP去除Powered by DouPHP版权的方法
- vue,react,angular本地配置nginx 环境单页面应用
- Oracle学习笔记:with as子查询用法
- Delphi 19种反调试检测法
- 由一段代码谈前端js优化和编码规范(一) 分类: JavaScript 2015-03-21 12:43 668人阅读 评论(1) 收藏