干货!一文搞定无头浏览器的概念以及在selenium中的应用
无头浏览器
无头浏览器,即 Headless Browser,是一种没有界面的浏览器。它拥有完整的浏览器内核,包括 JavaScript 解析引擎、渲染引擎等。与普通浏览器最大的不同是,无头浏览器执行过程中看不到运行的界面,但是我们依然可以用 GUI 测试框架的截图功能截取它执行中的页面。在这里强调一下,好多文章说无头浏览器不做渲染,其实这个说法是不准确的,如果无头浏览器不做渲染,那么怎么进行截图呢?可能有人又要说,如果无头浏览器都做渲染的话,那速度又怎么保障呢?个人观点,应该是在需要截屏的时候才进行页面元素的渲染!如果这个观点不对,欢迎留言讨论。这里总结一下浏览器如何渲染网页,简单的说浏览器的渲染机制可以分为五步:
第一步:解析html,构建DOM树
第二步:解析CSS,生成CSSOM树
第三步:合并dom树和css规则树,生成render渲染树
第四步:根据render渲染树进行布局
第五步:调用GPU对渲染树进行绘制,合成图层,显示在屏幕上
在这里就可以看出,当无头浏览器不做渲染时,速度显然会提升很多!
无头浏览器的主要应用场景
无头浏览器主要应用在: GUI 自动化测试、页面监控、网络爬虫以及没有桌面的linux系统中。在这里我们重点说一下 GUI 自动化测试,在 GUI 测试过程中,使用无头浏览器的好处主要体现在以下几个方面:
测试执行速度更快。 无头浏览器无需加载 CSS 以及渲染页面,在测试用例的执行速度上有很大的优势。
减少对测试执行的干扰。 可以减少操作系统以及其他软件(比如杀毒软件等)不可预期的弹出框,对浏览器测试的干扰。
一台机器上同时运行不同厂商的无头浏览器(无头浏览器占用内存资源,要比正常浏览器小),实现测试用例的并发执行。
无头浏览器缺点
1. 不能完全模拟真实的用户行为
2. 不便于调试(各个浏览器的开发者工具)
主流的无头浏览器概述
Chrome Headless,Chrome从59版本开始支持
Firefox Headless,Firefox从56版本开始支持
PhantomJS,使用JavaScript编写的无头浏览器,能够支持Windows, macOS, Linux
Splash,使用Python编写的无头浏览器,使用WebKit作为引擎
HtmlUnit,使用Java编写的无头浏览器,使用Rhino engine作为引擎
无头浏览器在selenium中的应用
在我们测试同学的实际工作中,大概率使用无头浏览器的场景就是通过selenium 进行自动化测试了,在这里默认同学们已经了解了selenium的安装和使用方法,所以直接上通过python实现调用无头浏览器的代码
import time
from selenium import webdriver
options = webdriver.ChromeOptions()
options.set_headless()
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.baidu.com/')
time.sleep(3)
print(driver.page_source)
driver.close()
其实,selenium在chrome中实现headless非常的简单,只需要下面两句代码即可
options.set_headless()
driver = webdriver.Chrome(chrome_options=options)
上面的代码,实测可以正常运行!原创不易,如果文章帮到了你,劳烦点赞转发!
干货!一文搞定无头浏览器的概念以及在selenium中的应用相关推荐
- 再见,可恶的桔梗导航!一文搞定chrome浏览器默认打开页面被流氓软件绑定
每次打开谷歌浏览器,默认打开页面都是桔梗导航,就很烦,就想着你来个百度也好啊,看到这个花花绿绿的浏览器充斥着满屏幕的垃圾信息就真的心烦意乱,我可是计算机系的学生,活人总不能让尿憋死,不行得想个法子~ ...
- php带参数单元测试_一文搞定单元测试核心概念
基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...
- 【Python基础】一文搞定pandas的数据合并
作者:来源于读者投稿 出品:Python数据之道 一文搞定pandas的数据合并 在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能 ...
- 一文搞定Swing和Qt按钮和文本框的创建
一文搞定Swing和Qt按钮和文本框的创建 Qt的截图 java的 源码 package com.lujun;import java.awt.Container;import javax.swing. ...
- 一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出
一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出 今天我们使用NPOI类库读写xlsx文件, 最终实现的效果如图所示 从太平洋官网下载相应的类库,大概4~5MB,不要从github ...
- 一文搞定Qt读写excel以及qt读写xml数据
一文搞定Qt读写excel以及qt读写xml数据 最终的实现效果图 RC_ICONS = logo.ico .pro文件同级目录下加入 logo.ico 图标文件,运行文件,文件的图标就被写入软件 u ...
- 一文搞定 Spring Data Redis 详解及实战
转载自 一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...
- 一文搞定面试中的二叉树问题
一文搞定面试中的二叉树问题 版权所有,转载请注明出处,谢谢! http://blog.csdn.net/walkinginthewind/article/details/7518888 树是一种比较重 ...
- 【全网最全】一文搞定 Linux 压缩、解压哪些事儿
一文搞定 Linux 压缩.解压哪些事儿 Linux 常用的解压和压缩命令如下: 1..tar # 解包 tar xvf FileName.tar # 打包 tar cvf FileName.tar ...
最新文章
- R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片
- 用Ajax构建关键任务的企业级Web应用 ——《深入Ajax:架构与最佳实践》
- 网站SEO优化的高效手段有哪些?
- PAT甲级1028 List Sorting:[C++题解]排序,cin和cout会超时
- 新建文章1,改名后按回车
- C++ STL : 模拟实现STL中的容器适配器stack和queue
- NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?
- python中的分号
- 东风科技php,东风科技(600081)违规记录_新浪财经_新浪网
- PyCharm: Simplify chained comparison
- *HDU1846HDU2188 巴什博奕
- Jmeter(十七)Logic Controllers 之 Interleave Controller
- 排序(二分插入排序)
- 2个方法解决PDF转成WORD
- 无线充电发热解决办法
- LDR6023E-解决苹果PD 20W快充市场供不应求
- win10 系统识别不了移动硬盘
- Win8.1 安装nltk及nltk_data数据
- pgsql的pg_basebackup
- 神经风格转移:Anaconda快速搭建DL框架学梵高(Van Gogh)绘画Ubuntu16.04 CPUGPU版