以前我们介绍过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

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

  1. python headless_Python 爬虫杂记 - Chrome Headless

    Chrome Headless使用 测试 Chrome 版本: 62.0.3202.89(正式版本)(64 位) Python环境:python2.7 注: Headless模式需要59版本及以上! ...

  2. python chrome headless_[技巧] chrome headless 爬虫抓取websoket 数据

    目录 源起 分析 实践 总结 源起 周末答应了一个朋友帮他看一下一个网站应该怎么爬,费话不说直接先上网站 https://datacenter.jin10.com/price 数据一直在不停的闪,直觉 ...

  3. 带你一步步破解亚马逊 淘宝 京东的反爬虫机制!

    事情是这样的 亚马逊是全球最大的购物平台 很多商品信息.用户评价等等都是最丰富的. 今天,手把手带大家,越过亚马逊的反爬虫机制 爬取你想要的商品.评论等等有用信息 反爬虫机制 但是,我们想用爬虫来爬取 ...

  4. Python爬虫和反爬虫的斗争

    我们常接触的网络爬虫是百度.搜搜.谷歌(Google)等公司的搜索引擎,这 些搜索引擎通过互联网上的入口获取网页,实时存储并更新索引.搜索引擎的基础 就是网络爬虫,这些网络爬虫通过自动化的方式进行网页 ...

  5. 爬虫厉害?反爬虫技术才是真的牛!

    黑马程序员视频库 播妞QQ号:3077485083 传智播客旗下互联网资讯.学习资源免费分享平台 你被爬虫侵扰过吗?爬虫不仅会占用大量的网站流量,造成有真正需求的用户无法进入网站,同时也可能会造成网站 ...

  6. 爬虫与反爬虫技术分析

    科普: 什么是爬虫: 百度百科:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还 ...

  7. 常见的反爬虫技术有哪些?如何防止别人爬自己的网站?

    搜索引擎可以通过爬虫抓取网页信息,同时也有很多企业通过爬虫获取其他平台的信息用于数据分析或者内容优化,但是对于自身网站有些页面或者信息并不希望被爬虫抓取,那我们如何来实现反爬虫技术呢?如何防止别人爬自 ...

  8. 爬虫进阶:反反爬虫技巧!

    主要针对以下四种反爬技术:Useragent过滤:模糊的Javascript重定向:验证码:请求头一致性检查. 高级网络爬虫技术:绕过 "403 Forbidden",验证码等 爬 ...

  9. python反反爬虫教学_爬虫进阶:反反爬虫技巧

    主要针对以下四种反爬技术:Useragent过滤:模糊的Javascript重定向:验证码:请求头一致性检查. 高级网络爬虫技术:绕过 "403 Forbidden",验证码等 爬 ...

最新文章

  1. MyBatis传入多个参数的问题 - mingyue1818
  2. node.js:fs.open 和 fs.write 读取文件和改写文件
  3. java编译器id_JAVA 词法编译器
  4. node to traverse cannot be null!
  5. Hive Sql 时间格式化处理
  6. nohup /dev/null 21 含义详解
  7. 爬虫-使用xpath拿36KR的数据-xpath的学习与演练
  8. 【java】从进程角度理解java
  9. Python学习笔记之函数(四)
  10. 一场由SameSite字段引发的前端悲剧
  11. Facebook的智能音箱跳,票,了
  12. Android科大讯飞语音识别源码及API下载
  13. AS打开卡住、一直加载的问题
  14. 大连市2011年初中毕业升学考试试测(一)数 学
  15. 夏泽网 中国渔业统计年鉴年鉴资料网
  16. 7种常用数据分析方法 (下)
  17. Natural_Earth 全球地形渲染图 Version 3.2
  18. 阿拉丁2021年度小程序白皮书发布,凡泰极客 FinClip 技术再度入选(内附完整白皮书下载)
  19. 06-图3 六度空间 (30分)
  20. iphone通过iTunes12.7怎么设置铃声

热门文章

  1. PHP5中PDO(PHP DATA OBJECT)模块基础详解
  2. Nginx + Lua + redis (一)(转)
  3. nagios总结与基本配置模板-V2
  4. Helloj2ee WPF书评系列——缘起
  5. Verilog中inout端口的使用方法
  6. mongo mysql 聚合性能_Mongodb和Mysql的性能分析
  7. 如何修改远程登录端口号?
  8. U型管铁球或将代替现代火箭喷射装置
  9. 自然语言处理 的 一些环境和包
  10. 微型激光投影廉价版本