反爬虫——使用chrome headless时一些需要注意的细节

以前我们介绍过chrome headless的用法(https://www.cnblogs.com/apocelipes/p/9264673.html)。

今天我们要稍微提一下其中一个细节。

反爬和window.navigator对象

navigator对象,一个对大家来说既熟悉又陌生的名词,熟悉是因为在学BOM对象的时候或多或少都见过甚至在代码中使用过,陌生是因为对于navigator对象来说虽然各大浏览器都有实现却一直没有一个统一的标准,所以在不同浏览器上的navigator对象也可能是不一样的,所以不鼓励在生产环境使用,用得少,自然也就陌生了。

然而反爬就是要不从常规处下手,如果有某个特性比较冷僻,又可以用来区分人类用户和爬虫或者增加爬取难度,那么它就一定会被反爬工程师善加利用。今天我们的主角就是navigator对象了。

一般的反爬虫会有header验证,浏览器验证等等,这些在你使用headless browsers时都不成问题,所以反爬工程师们要如何阻止你的爬虫呢?不急,我们先看下正常浏览器里navigator对象的内容:

这是chrome浏览器,因为headless没办法截图,所以我就把navigator对象的属性全部保存成了文本,这是使用headless时的信息:

vendorSub:
productSub: 20030107
vendor: Google Inc.
cookieEnabled: true
appCodeName: Mozilla
appName: Netscape
appVersion: 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...
...
webdriver: true
...
unregisterProtocolHandler: function unregisterProtocolHandler() { [native code] }
deviceMemory: 8
clipboard: {}
...

因为篇幅,我做了节选,需要注意的就是红色的部分,这是相比正常浏览器所多出来的部分。

经常和爬虫打交道的可能已经看出了,这是启用了webdriver协议之后会包含的字段,可是我们使用的chrome headless使用的是devtools protocol啊,怎么也会有这个标志呢?

答案在这里:

没错,当你指定了“--headless”参数的时候,不管是什么协议,都会带有该字段,如果你不指定“--headless”参数使用devtools protocol控制chrome,那么就和使用正常的浏览器没有区别。

仔细想一想,正常的人类访问网页怎么可能用没有界面的headless模式嘛,这样如果你不当心的话一抓一个准。

解决方案

解决办法其实也不麻烦,大致有如下几点:

  • 更换浏览器,如上图所示,这一特性是chrome 63以后添加的,那么只要用chrome 62即可,devtools protocol也支持chrome 62;
  • 不使用headless模式,不使用headless模式也自然不会被检测到,当然,启动一个浏览器窗口来渲染页面,性能肯定是不及headless的,这点需要权衡;
  • 只对必要的页面使用headless,其余数据仍用httpclient模拟请求的方式获取,这也是最有效的方式,当然这样会极大的增加开发成本。

总之绕过这一检测机制的方法有很多,这篇文章仅仅是抛砖引玉而已,希望大家以后遇到类似的反爬措施时不要觉得束手无策。

最后希望大家在做爬虫时请遵守网络道德,不要给对方站点添麻烦。

如果有意见和建议,欢迎指出!

参考:https://www.chromestatus.com/feature/6216034532982784

原文地址:https://www.cnblogs.com/apocelipes/p/9527013.html

时间: 2024-08-29 07:12:28

反爬虫——使用chrome headless时一些需要注意的细节的相关文章

Python 爬虫杂记 - Chrome Headless

Chrome Headless使用 测试 Chrome 版本: 62.0.3202.89(正式版本)(64 位) Python环境:python2.7 注: Headless模式需要59版本及以上! Chrome的安装与配置不在此赘述, 不过需要注意的是: 版本号与驱动的映射关系! 版本号与驱动的映射关系!! 版本号与驱动的映射关系!!! Chrome与Chromedriver的映射关系表: Chromedriver下载链接:http://chromedriver.storage.googlea

反爬虫和抗DDOS攻击技术实践

导语 企鹅媒体平台媒体名片页反爬虫技术实践,分布式网页爬虫技术.利用人工智能进行人机识别.图像识别码.频率访问控制.利用无头浏览器PhantomJS.Selenium 进行网页抓取等相关技术不在本文讨论范围内. Cookie是什么 大家都知道http请求是无状态的,为了让http请求从"无状态" to "有状态" , W3C 在 rfc6265 中描述了整个http协议的状态机制,既从客户端(通常是浏览器)到服务器端的流转过程,cookie 的引入使得 服务器在 接

反-反爬虫:用几行代码写出和人类一样的动态爬虫

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:李大伟 Phantomjs简介 什么是Phantomjs Phantomjs官网介绍是:不需要浏览器的完整web协议栈(Full web stack No browser required),也就是常说的无头浏览器--或者好听点叫做:无界面的web解析器. Phantomjs的特点 由于"无头"--免去了渲染可视化的网页界面,她的速度要比一般的浏览器快不少,又因为她是完整的web协议栈,所以不仅仅提供了JavaScri

关于爬虫与反爬虫简略方案

像安全与黑客从来都是相辅相成一样. 爬虫与反爬虫也是在双方程序员的斗智斗勇的过程不断发展和成长的. 抓包 抓包的目的: 分析出协议请求使用的数据,请求接口,参数等等. 常用的抓包分析工具: Fiddler Charles Sniffer Wireshark 具体使用策略,请自行百度,Google. 抓数据 这是我使用代理ip请求登录接口时,某APP的响应: 使用 HttpClient 模拟请求 充分了解 HttpClient 的特性,使用方式等. HttpClient4.5官方教程 user_a

Python爬虫与反爬虫(7)

[Python基础知识]Python爬虫与反爬虫(7) 很久没有补爬虫了,相信在白蚁二周年庆的活动大厅比赛中遇到了关于反爬虫的问题吧 这节我会做个基本分享. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分. 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式.前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一些应用ajax的网站会采用,这样增大了爬取的难度. user-agent 最简单的反爬虫机制,应该算是U-A校验了.浏览器在发送请求的时候

解决猫眼网反爬虫策略的爬虫

项目代码:Github [目录] 一.引入问题 二.分步实现 1.页面爬取 2.woff下载 3.字体解析规则 一.引入问题 可以看到,猫眼网电影评分,票房等的数据在响应的html中并不是直接提供给你的.这里的xefcf,xef87等数据,是以'特殊符号'的形式显示出来的. 可以发现这里请求了一个woff字体文件,而xefcf,xef87等数据的规则就是在这其中的.所以我们只需要在请求这个网页的同时,截去这部分style,然后获得woff地址,将它下载到本地,进行解析,就可以实现对评分的解密了.

Python爬虫?今天教大家玩更厉害的,反爬虫操作!零基础都能写!

主要针对以下四种反爬技术:Useragent过滤:模糊的Javascript重定向:验证码:请求头一致性检查.高级网络爬虫技术:绕过 "403 Forbidden",验证码等 爬虫的完整代码可以在 github 上对应的仓库里找到. 我从不把爬取网页当做是我的一个爱好或者其他什么东西,但是我确实用网络爬虫做过很多事情.因为我所处理的许多工作都要求我得到无法以其他方式获得的数据.我需要为 Intoli 做关于游戏数据的静态分析,所以我爬取了Google应用商店的数据来寻找最新被下载的AP

反爬虫机制(一)

爬虫用久了,总是会被封的.——鲁迅 有些网站,特别是一些陈年老站,没有做过反爬虫机制的,我们可以尽情地爬,愉快地爬,把它们的底裤..数据全都爬下来.最多出于情怀考虑,我们爬慢一点,不给它的服务器太大压力.但是对于有反爬虫机制的网站,我们不能这样. U-A校验 最简单的反爬虫机制应该是U-A校验了.浏览器在发送请求的时候,会附带一部分浏览器及当前系统环境的参数给服务器,这部分数据放在HTTP请求的header部分. 我们要做的就是通过requests库设置我们的爬虫U-A.一般来说第三方库发送请求

反爬虫之信息校验反爬虫

服务器端通过校验请求头或者请求正文中特定的信息,用以区分正常用户和爬虫程序 1.User-Agent反爬虫 这是一种较为初级的判断方法,以下简称ua: User-Agent就是请求头域之一,服务器能够从 User-Agent对应的值中识别客户端使用的操作系统CPU类型.浏览器.浏览器引擎.操作系统语言等.浏览器 User-Agent头域值的格式为: 浏览器标识 (操作系统标识;加密等级标识:浏览器语言)      渲染引擎标识     版本信息 如Chrome和Firefox: Chrome:M