iTesting软件测试知识分享

利用Headless实现无UI自动化

在做自动化的时, 偶尔你需要打开一个页面获取某些字段,但由于某些原因(通常是安全), 你又不想这个页面展示出来, 这个时候,不打开浏览器而使用浏览器就是刚需了。
我本来以为这个是很基础的知识,这两天一直有人问,那么就干脆写下来吧。

Headless的浏览器我们以前经常用PhantomJS, 但随着google宣布支持headless后, PhantomJS也停止更新了,那么是时候使用headless了。

什么是Headless chrome呢?

Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于出道较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境.

Headless有什么好处呢?

最直观的就是由于不需界面,所以速度上比普通浏览器稍快,也不会因为误操作界面导致人为错误。 另外,headless在爬虫程序,和网页截图时也经常用。

如何使用?
chrome 的headless模式实现起来很简单,无需下载, 只要你运行的机器上有最新版的chrome即可(事实上59版本以后都支持), 当然了你需要crhome driver在你python安装路径的根目录下。。
下面我们以百度首页为例,打印出搜索框的文本“百度一下”。


1
2
3
4
5
6
7
8
9
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
driver.get("http://baidu.com")
time.sleep(1)
print(driver.find_element_by_xpath(".//*[@id='su']").get_attribute("value"))

是不是很简单?全程没有看到网页被打开,但是我们还是获得了我们需要的元素。

事实上, headless 不仅仅chrome支持, firefox也支持。用法如下:

1
2
3
4
5
6
7
8
9
10
11
import time
from selenium import webdriver
options = webdriver.FirefoxOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Firefox(firefox_options=options)
driver.get("http://baidu.com")
time.sleep(1)
print driver.find_element_by_xpath(".//*[@id='su']").get_attribute("value")

🐶 您的支持将鼓励我继续创作 🐶
-------------评论, 吐槽, 学习交流,请关注微信公众号 iTesting-------------
请关注微信公众号 iTesting wechat
扫码关注,跟作者互动