爬虫漫游指南:聊聊极验(Geetest)

爬虫漫游指南

聊聊极验(Geetest)

极验在中国的验证码市场可谓是鼎鼎大名,我甚至见过一些人,一看见滑块点选样式的验证码就说是极验,哪怕图片上印着网易易盾4个大字。由此见得,极验赢得了“席梦思”一般的江湖地位。(18岁以前,我一直以为“席梦思”==“床垫”,直到有一天我走进了家具市场。)

上至政务类网站国家企业信用信息公示系统,下至娱乐类网站斗鱼战旗龙珠,都可以看到极验的身影。于是,如何绕过极验自然成为了许多爬虫小伙伴不得不面对的问题。本文就来聊一聊,爬虫遇到用极验的网站,该如何是好。

绕过极验的3种方法

以2代极验滑块为例,绕过它无非就是这样的步骤

  • 抓包,了解请求流程
  • 打断点调试JS,逆向分析
  • 还原图片,识别缺口
  • 模拟滑动轨迹
  • 构造请求,获取validate

按照常理,接下来我就要一步步详细阐述各个步骤的具体实现方法,做一个2代极验破解教程,但我偏不,bite me.

聊这些技术细节的话,一是会触犯不少人的利益,二是指不定还律师函警告,我可不希望被抓走的时候大喊:别抓我,我是逆向工程师。
爬虫漫游指南:聊聊极验(Geetest)_第1张图片
所以折中一下,聊一些既能解决问题,又不会被抓的方法。

① Selenium等浏览器自动工具

对于一些小规模的数据抓取任务,比如苦逼大学生毕业设计时候遇上了极验的悲剧情况,可以采用selenium或者puppeteer等自动化工具,来手动打掉它的验证码。具体操作如下

  1. 用代码模拟极验出现之前的请求,比如一些cookie的获取,和其他参数的构建;
  2. 带上极验的gt、challenge参数,用puppeteer把验证码弹到你面前,手动把它滑过去或者点过去,得到validate;
  3. 带着你的validate,放心大胆的去抓数据吧。

有灵性的同学想必已经悟到了,这种方法就是把爬虫中的验证码部分单独剥离出来,人工完成,其他部分还是让爬虫自顾自的跑。你只要负责坐在电脑前,不停的拖验证码就行了,你打码越快,爬虫就跑的越快。

② 打电话,摇人

破解极验,是能挣钱的,能挣钱的事,永远不怕找不到人做。正规一点的,网上大大小小的打码平台也有不少,不正规点的,道上也有几个兄弟接这个活的,可能还比各个平台便宜不少。

但是今年以来,我不止一次碰到打码平台跑路了,官网挂掉,客服失踪,音讯全无的那种。这类的服务总有一丝丝灰色的感觉,要是再撞上诸如南山必胜客这样的律师团队,倒闭是必然的。

方法①呢太费力了,大规模部署是不可能的,方法②呢费钱还费心,连大平台都不能保证寿比南山,遑论一些接私活的小老弟了。所以我最近采用的都是方法③。

③ 2captcha

2captcha也是个打码平台。
嗯???
爬虫漫游指南:聊聊极验(Geetest)_第2张图片
别别别,大哥把你的40米大刀收起来,听我说完动手不迟。

首先,2captcha是个国外的平台,国内相关政策再怎么变化也不影响他提供服务,多的不说,想想为什么CL1024到现在都绿树长青。

另外,国外打码平台提供极验服务的凤毛麟角,挖到这么一家的真的不容易。

最后,也是最重要的,它!不!贵!

爬虫漫游指南:聊聊极验(Geetest)_第3张图片

2captcha使用教程

上2captcha.com注册充值这些就不说了,感谢马云爸爸,alipay已经是个世界通用的单词了,不用去折腾VISA,万事达这些鬼东西。

充值完成后,会获得一个API KEY,就是之后调用接口的凭证,不能给别人看到哟。

根据文档,我们只需要发送这样一个GET请求就能让2captcha帮我们打码了:

https://2captcha.com/in.php?
key=API KEY&
method=geetest&
gt=f2ae6cadcf7886856696502e1d55e00c&
challenge=43b0420ea886ddce2c5a44487b7487f0&
pageurl=你看到极验的url&
api_server=api-na.geetest.com

解释一下这些参数:

  • key: 刚才的API KEY
  • method: geetest,就是极验,这个网站的拳头产品是谷歌的CAPTCHA,和其他各种国外的验证码,所以需要选择一个验证码类型
  • gt: 极验参数,稍后细讲
  • challenge: 极验参数,稍后细讲
  • pageurl: 上面说了
  • api_server: 我也不知道这个参数干嘛用的,文档说非必须参数,但不填就报错,所以一起塞进请求吧

完后,得到的响应是这样的

OK|62818768647

OK就是告诉你请求已接收,后面那个就是请求id,过会儿带着这个id去领结果就行了。2captcha的工人们就开始吭哧吭哧的帮你打码了。sleep一小会儿之后,再次发送一个GET请求过去

https://2captcha.com/res.php?
key=API KEY&
action=get&
id=62818768647

就能拿到熟悉而又亲爱的validate了:

OK|{
    "geetest_challenge":"43b0420ea886ddce2c5a44487b7487f0m8",
    "geetest_validate":"771fc88a865a78d5fe198da9efa8ddbc",
    "geetest_seccode":"771fc88a865a78d5fe198da9efa8ddbcjordan"
    }

拿到这些参数之后,接下来就可以去你想爬的网站为所欲为了。
爬虫漫游指南:聊聊极验(Geetest)_第4张图片

附:gt和challenge参数的获取

容我找一家国外的网站举例,风险小一点。
https://www.whitepages.com/distil_r_captcha.html?requestId=ef4b3d08-551e-4655-bb39-555c7d7da878&httpReferrer=%2Fdistil_r_captcha.html

gt参数

极验的gt参数是固定的,和你在2captcha持有的API KEY基本上是一个道理,随便找个有gt参数的请求,复制出来就行了。

challenge参数

challenge参数才是关键所在。每个用极验的网站都有一个专门的链接用于更新challenge参数,比如这个whitepages就是:
https://www.whitepages.com/distil_r_captcha_challenge
抓包找到这个请求,然后重放请求。注意!一定要重放请求再次获取,你抓包抓到的challenge参数已经没有用了!
重放后,得到如下响应

43b0420ea886ddce2c5a44487b7487f0;zh-cn;

把你需要的东西复制出来,完事儿~

你可能感兴趣的:(爬虫)