Python 爬虫,如何破解谷歌验证码?

您所在的位置:网站首页 python如何破解验证码 Python 爬虫,如何破解谷歌验证码?

Python 爬虫,如何破解谷歌验证码?

2023-06-17 17:13| 来源: 网络整理| 查看: 265

之前介绍过 Google ReCAPTCHA 验证码的绕过方法,当时介绍的是用 2Captcha,然而有些朋友跟我反映说 2Captcha 价格比较贵,而且用起来比较复杂。

今天再给大家介绍另一个用于破解 Google ReCAPTCHA 的方法。

ReCAPTCHA 介绍

可能大家还没听说过什么是 ReCAPTCHA,可能由于某些原因,这个验证码在国内出现不多,不过想必大家应该多多少少见过或用过。它长这个样子:

这时候,只要我们点击最前面的复选框,验证码算法会首先利用其「风险分析引擎」做一次安全检测,如果直接检验通过的话,我们会直接得到如下的结果:

如果算法检测到当前系统存在风险,比如可能是陌生的网络环境,可能是模拟程序,会需要做二次校验。它会进一步弹出类似如下的内容:

比如上面这张图,验证码页面会出现九张图片,同时最上方出现文字「树木」,我们需要点选下方九张图中出现「树木」的图片,点选完成之后,可能还会出现几张新的图片,我们需要再次完成点选,最后点击「验证」按钮即可完成验证。或者我们可以点击下方的「耳机」图标,这时候会切换到听写模式,验证码会变成这样:

这时候我们如果能填写对验证码读的音频内容,同样可以通过验证。这两种方式都可以通过验证,验证完成之后,我们才能完成表单的提交,比如完成登录、注册等操作。这种验证码叫什么名字?这个验证码就是 Google 的 ReCAPTCHA V2 验证码,它就属于行为验证码的一种,这些行为包括点选复选框、选择对应图片、语音听写等内容,只有将这些行为校验通过,此验证码才能通过验证。相比于一般的图形验证码来说,此种验证码交互体验更好、安全性会更高、破解难度更大。

其实上文所介绍的验证码仅仅是 ReCAPTCHA 验证码的一种形式,是 V2 的显式版本,另外其 V2 版本还有隐式版本,隐式版本在校验的时候不会再显式地出现验证页面,它是通过 JavaScript 将验证码和提交按钮进行绑定,在提交表单的时候会自动完成校验。除了 V2 版本,Google 又推出了最新的 V3 版本,reCAPTCHA V3 验证码会为根据用户的行为来计算一个分数,这个分数代表了用户可能为机器人的概率,最后通过概率来判断校验是否可以通过。其安全性更高、体验更好。

体验

那哪里可以体验到 ReCAPTCHA 呢?我们可以打开这个网站:https://www.google.com/recapt...,建议科学上网,同时用匿名窗口打开,这样的话测试不会受到历史 Cookies 的干扰,如图所示:

这时候,我们可以看到下方有个 ReCAPTCHA 的窗口,然后点击之后就出现了一个验证图块。

当然靠人工是能解的,但对于爬虫来说肯定不行啊,那怎么自动化解呢?

接下来我们就来介绍一个简单好用的平台。

解决方案

本次我们介绍的一个 ReCAPTCHA 破解服务叫做 YesCaptcha,主页是 http://yescaptcha.365world.co...,它现在同时可以支持 V2 和 V3版本的破解。

我们这次就用它来尝试解一下刚才的 ReCAPTCHA 上的 V2 类型验证码:https://www.google.com/recapt...。

简单注册之后,可以找到首页有一个 Token。我们可以复制下来以备后面使用,如图所示:

它有两个关键的 API,一个是创建验证码服务任务,另一个是查询任务状态,API 如下:

创建任务:http://api.yescaptcha.365worl...查询状态:http://api.yescaptcha.365worl...

API 文档可以参考这里:http://docs.yescaptcha.365wor...

经过 API 文档可以看到使用的时候可以配置如下参数:

参数名是否必须说明token是请在个人中心获取 (Token)siteKey是ReCaptcha SiteKey (固定参数)siteReferer是ReCaptcha Referer (一般也为固定参数)captchaType否ReCaptchaV2(默认) / ReCaptchaV3siteAction否ReCaptchaV3 选填 Action动作 默认verifyminScore否ReCaptchaV3 选填 最小分数(0.1-0.9)

这里就有三个关键信息了:

token:就是刚才我们在 YesCaptcha 上复制下来的参数siteKey:这个是 ReCAPACHA 的标志字符串,稍后我们会演示怎么找。siteReferer,一般是 ReCAPTCHA 的来源网站的 Referer,比如对于当前的案例,该值就是 https://www.google.com/recapt...

那 siteKey 怎么找呢?其实很简单,我们看下当前 ReCAPTCHA 的 HTML 源码,从源码里面找一下就好了:

这里可以看到每个 ReCAPTCHA 都对应一个 div,div 有个属性叫做 date-sitekey,看这里的值就是:

6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-

好,万事俱备了,只差代码了!

开工

我们就用最简单 requests 来实现下吧,首先把常量定义一下:

TOKEN = '50a07xxxxxxxxxxxxxxxxxxxxxxxxxf78'  # 请替换成自己的TOKEN REFERER = 'https://www.google.com/recaptcha/api2/demo' BASE_URL = 'http://api.yescaptcha.365world.com.cn' SITE_KEY = '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-' # 请替换成自己的SITE_KEY

这里我们定义了这么几个常量:

TOKEN:就是网站上复制来的 tokenREFERER:就是 Demo 网站的链接API_BASE_URL:就是 YesCaptcha 的 API 网址SITE_KEY:就是刚才我们找到的 data-sitekey

然后我们定义一个创建任务的方法:

def create_task():     url = f"{BASE_URL}/v3/recaptcha/create?token={TOKEN}&siteKey={SITE_KEY}&siteReferer={REFERER}"     try:         response = requests.get(url)         if response.status_code == 200:             data = response.json()             print('response data:', data)             return data.get('data', {}).get('taskId')     except requests.RequestException as e:         print('create task failed', e)

这里就是调 API 来创建任务,没什么好说的。

如果创建成功之后会得到一个 task_id,接下来我们就需要用这个 task_id 来轮询查看任务的状态,定义如下的这么一个方法:

def polling_task(task_id):     url = f"{BASE_URL}/v3/recaptcha/status?token={TOKEN}&taskId={task_id}"     count = 0     while count 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3