无头浏览器
无头浏览器,即 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)
上面的代码,实测可以正常运行!原创不易,如果文章帮到了你,劳烦点赞转发!