无头浏览器Chrome Headless的爬取和反爬取

最近两天想到Chrome也提供Headless的无头模式,突然想尝试一下。首先官方有一篇文章专门介绍了Chrome无头模式的使用,和基于无头模式衍生出来的各种工具。详情大家可以阅读此文。因此在文章中已经覆盖的内容,我这里就不再重复了。本文我们就简单说说在使用Chrome Headless过程中的一些感想和遇到的问题吧。

安装Chrome
因为我们将要使用Chrome的无头模式,所以选择在Centos7上安装Chrome。安装过程参考了Centos下安装Chrome(安装过程)和centos安装google-chrome(解决依赖问题)。也可以参考《CentOS镜像配置指南》,能够帮助大家更有效的在CentOS中安装相关依赖和工具。

另外在前期试用中为了方便起见,直接尝试在Mac终端命令行执行Chrome无头模式。Mac上的版本是“Version 86.0.4240.193”。默认安装路径为:

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome

为了方便在命令行中执行chrome命令,我们在bin文件夹下做了一个软连接(谷歌文档中使用alias做命令别名)

ln -s /Applications/Google Chrome.app/Contents/MacOS/Google Chrome /usr/local/bin/chrome

随后在终端terminal中执行一条chrome命令直接宣布失败。错误信息为:

Abort trap: 6

如图所示:

Chrome无头模式的爬取和反爬取
Chrome浏览器的无头模式的使用场景一般是自动化测试或者数据爬取。主要是为了解决很多动态渲染的网站,可以使用Chrome或者Phantomjs(已经不再维护)渲染以后采集页面中的信息。对于需要动态渲染的网站,Chrome无头模式可以非常方便的集成到数据爬取工程中,并且使用也非常方便。当然,如果作为红蓝对抗中的蓝军,想要防范Chrome无头模式的爬虫也是非常方便的。以下是为了探测Chrome无头模式而写的一个非常简单的测试用例:

在以上6项测试中有5项没有通过。当然通过一些方案,我们可以可以想办法绕开的。例如,对于第一条User Agent的测试,我们可以通过配置来欺骗测试程序。以下命令行就覆盖了Chrome无头模式的默认UA:

chrome --headless --disable-gpu --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36" --print-to-pdf https://baidu.com

总的来说,Chrome的无头模式还是非常方便配置和使用的。同时也可以配合Selenium、Puppeteer等项目在现有工程中集成使用。如果能够活用Chrome的无头模式,相信可以达到事半功倍的效果。

Captain QR Code

扫码联系船长

发表回复

您的电子邮箱地址不会被公开。