HEADLESS BROWSER 指的是不须要用户界面的浏览器,这种浏览器在自动化测试和爬虫领域有着普遍的应用。python
例如你想在网页上运行一些测试,从网页抓取信息,检查浏览器访问某些资源的状态,定时截取网页等等,你须要的是浏览器处理网页但不必定须要浏览器界面,这些状况都是HEADLESS BROWSER的应用场景。git
Chrome 从 59.0 开始支持HEADLESS模式(2017年5月),Firefox从 55.0 开始也支持了HEADLESS模式(2017年9月)。也就是在今年2018年的4月份,老牌的无头浏览器 PhantomJS 的核心开发者宣布再也不维护该项目,由于Chrome 和Firefox的HEADLESS模式已经足够好并能够替代PhantomJS。web
使用浏览器的HEADLESS模式进行自动化测试,你须要先知足如下前提:chrome
万事俱备,废话很少说咱们直接上演示代码。浏览器
from time import sleep from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') # 容许在无GPU的环境下运行,可选 options.add_argument('--window-size=1920x1080') # 建议设置 browser = webdriver.Chrome(chrome_options=options) browser.get('https://www.baidu.com') browser.find_element_by_id('kw').send_keys('HELLO') browser.find_element_by_id('su').click() sleep(1) # 简单粗暴的等待,实际项目中勿用 assert browser.title == u'HELLO_百度搜索' browser.save_screenshot('chrome-headless-test.png')
from time import sleep from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() options.add_argument('--headless') # options.add_argument('--window-size=1920x1080') # Firefox无效 browser = webdriver.Firefox(firefox_options=options) browser.set_window_size(1280, 1024) # 启动后设置浏览器大小,可是高度会随着访问的网页变化 browser.get('https://www.baidu.com') browser.find_element_by_id('kw').send_keys('HELLO') browser.find_element_by_id('su').click() sleep(1) assert browser.title == u'HELLO_百度搜索' browser.save_screenshot('firefox-headless-test.png')
浏览器HEADLESS模式可让程序运行的环境更贴近用户访问的真实环境,相对于模拟UserAgent等方式得出的数据也会更加准确可靠。多线程
尤为在自动化测试领域,HEADLESS也有取代传统的带界面的自动化测试的趋势,有一些公司已经将实践投入生产中。咱们能够在调试自动化测试时使用用户界面,当部署到持续集成环境中是启用HEADLESS,并开启多线程使用并行的方式来运行测试案例,这样效率会大大提升,并且由于界面被干扰而致使测试失败的几率也会下降。less
总的来讲,至少在端对端的自动化测试中,HEADLESS模式没有明显的缺点,甚至能够成为网页自动化测试进化的下一个目标。gitlab
关于做者:Toby Qin, Python 技术爱好者,目前从事测试开发相关工做,转载请注明原文出处。测试
欢迎关注个人博客 https://betacat.online,你能够到个人公众号中去当吃瓜群众。google