selenium绕过爬虫特征检测

Python + selenium 如何绕过爬虫特征检测?

selenium绕过爬虫特征检测_服务器

在信息时代,数据变得越来越重要。然而并不是每一家公司都是腾讯、百度、知乎、字节跳动等,在日常业务中就可以产生大量的内容或用户数据。很多人在互联网获取数据时,都是使用爬虫获取,而爬虫也是一种最经济实惠的获取数据手段。

但爬虫需要遵守 robot 协议,并且在不损害目标服务器的情况下进行。然而,很多爬虫却不理会 robot 协议,并且不对爬取频率进行限制,高并发的爬虫严重占用了服务器的资源,并会影响真正用户的体验。所以,现在很多公司都专门的反爬团队,爬与反爬之间,不断博弈,技术不断升级,从某种意义上,这也是促进了行业的进步。

很多爬虫新手常常抱怨自己写的爬虫 demo 获取的内容和自己手动打开浏览器的不一样。这种往往是连 user agent 没有设置、请求频率都没有控制,第一时间就被检测到时非用户访问,不把你放进蜜罐才怪呢。

爬虫技术,是一种非常综合的技术。不是你学会 request,学会用 bs 解析 html 并保存内容就学会了,你只会这些,也就只能爬取一些小站或者 demo 页面。爬虫的难点往往在于如何绕过爬虫识别,即反反爬虫。

如果你需要爬取如知乎、淘宝,往往需要借助 selenium 工具。我在 2011 年的时候就接触过 selenium,那时用 selenium + cucumber + ruby 来做自动化测试,那时的 selenium 也没有现在那么完善。
那么该如何绕过爬虫识别呢?

selenium webdriver 有哪些爬虫特征,我不复制黏贴了,网上很多文章都有了。而为了方便,可以直接打开这个页面去检测: Antibot。 [https://bot.sannysoft.com/]

如下图所示,左边是正常打开的页面,右边是用 selenium webdriver 打开的页面。红线框里面的内容就是爬虫特征。当然,如果你使用 headless 模式,会有更加多的爬虫特征被检测出来。


图片.png
图片.png

selenium绕过爬虫特征检测_服务器_02

以下一步步消除这些特征。

  1. “Chrome 正受到自动测试软件的控制。”

selenium 提供了接口去消除这个,你只需要在你的代码里面加入:

options.add_experimental_option('excludeSwitches', ['enable-automation'])
  1. WebDriver (New) present (failed)

这个可以通过禁用 blink 特征。Blink 是 Chromium 的渲染引擎,V8 也是基于 Blink 开发的 JavaScript 引擎,具体原理我没有搞明白,猜测是 selenium 使用了一些 Blink 的特征,而原来 Chrome 是没有的。

options.add_argument('--disable-blink-features=AutomationControlled')

selenium绕过爬虫特征检测_数据_03


图片.png
图片.png
  1. “webDriver”: true, “webDriverValue”: true

关于这点,可以看上图左右两边,不管我是手动打开,还是用脚本打开,webdriver 都已经被标记为 true。我猜测是因为我曾经使用 selenium 打开这个爬虫特征检测网站,它已经记录了我的浏览器指纹,所以现在不管我是用 selenium 打开还是手动打开,都已经被标记为 true。所以,如果你曾经用脚本打开过某些网站,那么你很大概率都已经被对方记录了浏览器指纹,从而把你标记为疑似爬虫访问,而不敢你是不是真实访问。

那么思路就是隐藏浏览器指纹了。

Python 的 pyppeteer 可以用来隐藏浏览器指纹,但这个类库从 2018 年就已经没更新了,但谷歌团队维护的 puppeteer/puppeteer 却一直在更新。因此,国外有个叫 berstend 的开发者,写了一个 puppeteer-extra 插件来提取隐藏浏览器指纹特征的 js 脚本 stealth.min.js,那么我们用 selenium 打开页面之前,运行这个脚本,就可以成功隐藏浏览器指纹了。

如果你的环境已经安装了 nodejs,那么直接运行下面命令,就会在你当前的目录生成 stealth.min.js 文件了。

npx extract-stealth-evasions

想了解具体过程的朋友,可以查看:berstend/puppeteer-extra。

最后,在 python 里面,加入下面代码:

with open('./js/stealth.min.js') as f:  
   js = f.read()  browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {     "source": js })

运行后,浏览器指纹特征也被隐藏了。

selenium绕过爬虫特征检测_python_04


图片.png

selenium绕过爬虫特征检测
https://blog.51cto.com/u_15127500/4748564

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容