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

最新文章

  1. IOC和Aop使用的扩展
  2. Redis系列二之事务及消息通知
  3. JS判断是否来自手机移动端的访问,并跳转
  4. ASP.NET ZERO Core Application 学习笔记
  5. 树形dp--hdu 3534 Tree
  6. ARC指南1 - strong和weak指针
  7. SQL注入原理二
  8. C# 根据Word模版生成Word文件
  9. python 在调用时计算默认值
  10. kafka+storm连接
  11. static关键字使用
  12. 第四届CCCC团体程序设计天梯赛 后记
  13. 一步一步写数据结构(二叉树的建立和遍历,c++)
  14. robot framework教程-------虫师
  15. Singer 学习五 docker 运行说明
  16. DouPHP去除Powered by DouPHP版权的方法
  17. vue,react,angular本地配置nginx 环境单页面应用
  18. Oracle学习笔记:with as子查询用法
  19. Delphi 19种反调试检测法
  20. 由一段代码谈前端js优化和编码规范(一) 分类: JavaScript 2015-03-21 12:43 668人阅读 评论(1) 收藏

热门文章

  1. 主席树+二分 p4602
  2. 微信小程序--缓存,支持过期时间的二次开发封装
  3. 设备驱动基础学习--platform driver简单实现
  4. MVC简要介绍
  5. 【Python collections】
  6. Vue - 如何使用npm run build后的dist文件夹
  7. 获取表格数据转换为JSON字符串
  8. 开源协议:LGPL协议、OSGi协议
  9. 8.5-Day1T3--Asm.Def 的一秒
  10. Netty Learning Notes