下载

chrome canary 67
目前手上没有linux环境,所以就先用金丝雀版本了(之后发现正式版60之后的版本也支持headless了)。

headless 朝代更替

之前我还写过关于PhantomJS的内容,那会还没有headless,PhantomJS还是最好的解决方案之一,现在物是人非,chrome的降维打击让PhantomJS毫无立足之地。PhantomJS的作者已经宣布不再维护PhantomJS,一代神兵的陨落。两天前,phantomjs的作者宣布停止维护phantomjs项目

BaiduHi_2018-3-5_16-3-20.png

目前,Mac 上 Chrome 59 beta 版本与 Linux 上的 Chrome 57+ 已经开始支持 headless 特性。Windows 上 60之后的版本支持,也可以使用 Chrome Canary 60 进行开发。

目的就是实现没有窗口的纯后台浏览器,有没有显示窗口在效率上可能差了不止一点点,对爬虫效率的提升可以说是令人喜极而泣。对于网易云音乐那种复杂的js,chrome headless可以fuck的一干二净。

测试命令

#网页截图
chrome --headless --disable-gpu --screenshot --window-size=1280,3000 https://moozik.cn
#保存pdf
chrome --headless --disable-gpu --print-to-pdf https://moozik.cn
#打印页面dom
chrome --headless --dump-dom https://moozik.cn

前两个命令在chrome Canary67下和chrome64下都能成功,可是最后一个两个都是失败的,可能是对windows的支持还不是很好。chrome能支持还是没想到的,我只是试了一下,没想到是可以的。另外chrome的目录我是用管理员权限进去才能成功截图,可能跟我本机的安全设置有关系,想测试的小伙伴了解一下。下面是我截的图。

img

selenium中使用chrome headless

from selenium import webdriver
from selenium.webdriver.chrome.options import Options 

chrome_options = Options() 
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.binary_location = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'
# chrome_options.binary_location = 'C:/Users/xxx/AppData/Local/Google/Chrome SxS/Application/chrome.exe'
driver =webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://moozik.cn')
print(driver.title)

我分别用了chrome Canary67下和chrome64,都能正常打印网页标题,但是chrome64会有很多报错,暂不清楚问题在哪。
chrome64的回显为,其中的乱码为主题作者在console打印的信息。

[0305/154408.750:ERROR:gpu_process_transport_factory.cc(1009)] Lost UI shared context.
[0305/154408.816:ERROR:instance.cc(49)] Unable to locate service manifest for metrics
[0305/154408.817:ERROR:service_manager.cc(890)] Failed to resolve service name: metrics

DevTools listening on ws://127.0.0.1:12398/devtools/browser/aa52f955-b58a-4691-b6d7-2e4f89d3e12b
[0305/154414.596:ERROR:instance.cc(49)] Unable to locate service manifest for metrics
[0305/154414.614:ERROR:service_manager.cc(890)] Failed to resolve service name: metrics
[0305/154423.802:INFO:CONSOLE(3)] "
 %c handsome v4.2 Pro %c by鍙嬩汉C<www.ihewro.com>

", source: https://moozik.cn/usr/themes/handsome/assets/js/core.min.js?v=4.2.12018022601 (3)
三木成舟 - 生命就是音乐啤酒鲜花~

到这里可以说测试圆满成功了,以后就可以使用最新浏览器内核来抓取数据了,不用再担心复杂的js加密,也不用担心引擎兼容的问题了。

参考

https://zhuanlan.zhihu.com/p/27100187
https://developers.google.com/web/updates/2017/04/headless-chrome
https://objectpartners.com/2017/04/13/how-to-install-and-use-headless-chrome-on-osx/

最后修改:2018 年 03 月 05 日
如果觉得我的文章对你有用,请随意赞赏