使用python selenium解决谷歌验证码(reCAPTCHA)

reCAPTCHA介绍
体验地址:
https://www.google.com/recaptcha/api2/demo
作为一个新时代农民, 相信你或多或少见过, 就长这样
如果点击后, 发现当前系统存在风险, 会出来图片验证, 这个图片验证可能是几张图片, 点击完提交, 也有可能是点击完符合条件的图片后, 会在原位置, 出来一张新的图片, 一直点到没有符合条件的图片后, 点击提交, 像这样的

也可以点击耳机按钮, 切换到听写模式

reCAPTCHA版本
V1: 简单的文字识别
2012年起,reCAPTCHA除了原来的文字扫描图片外,也采用Google街景拍摄的门牌号码照片。目前基本见不到了

V2: 就是需要点选的, 显式的验证
2014年年底,改以“我不是机器人”(I’m not a robot)于方框中打勾,进而完成判别。并开始采用听单词的验证码模式。

V3: 无感验证, 是一个分数制验证系统, 根据用户行为, 计算一个分数
Google发布reCAPTCHA v3,采用分数制验证系统,对用户在网站上的动作进行评分,若分数过低则会被判定为机器人


解决方案平台
2captcha
不但支持reCAPTCHA, 还支持 TikTok等等验证, 功能齐全, 但比较贵
yescaptcha
http://yescaptcha.365world.com.cn/
只支持reCAPTCHA验证, 目前V3版本验证质量一般, 价格美丽, 而且注册就送1500点数, 一次15点数, 可以调用100次, 测试足够了, 充值的话是1元1000点

使用方法
以yescaptcha为例, 说一下如何使用(两个平台验证流程几乎相同)
所需参数

* TOKEN: http://yescaptcha.365world.com.cn/ 注册后会生成一个token
* REFERER: 网站验证的referer, 找到xxxx/api.js的请求
* SITE_KEY: 找到ancher的请求
或者右击查看网页源代码, 找到data-sitekey
创建验证码任务
url
http://api.yescaptcha.365world.com.cn/v3/recaptcha/create
参数:
| 参数名 | 是否必须 | 说明 |
| token | 是 | 请在个人中心获取 (Token) |
| siteKey | 是 | ReCaptcha SiteKey (固定参数) |
| siteReferer | 是 | ReCaptcha Referer (一般也为固定参数) |
| captchaType (验证码版本) | 否 | ReCaptchaV2(默认) / ReCaptchaV3 不知道是哪一种看后面的说明 ReCaptchaV3 V3必填 |
| siteAction | 否 | ReCaptchaV3 必填 Action动作 默认verify |
| minScore | 否 | ReCaptchaV3 选填 最小分数(0.1-0.9) |
代码
会返回一个任务id, 用于获取验证结果

获取任务结果****url
http://api.yescaptcha.365world.com.cn/v3/recaptcha/status
参数
| 参数名 | 是否必须 | 说明 |
| taskId | 是 | 创建任务获取到的ID |
代码


demo网站验证
使用requests

验证结果
**使用selenium:**在页面上有两种方式
回调:
在页面上看不到点击验证, 而是在登录的时候才会调用验证,这种的就要找回调函数, 然后使用回调函数加上验证的token调用
文档: https://shimowendang.com/docs/5o4z8XhhvsUSzYFa/read
非回调:
在页面上可以看到验证, 验证完后, 然后可以点击登录, 就像我们正在验证的demo网站
代码: https://shimowendang.com/docs/vQRuIEUiT5ocoAZ9/read
在页面上验证
打开控制台, 搜索 g-recaptcha-response的文本框元素
右击修改元素

把token复制进去

也可以在控制台, 使用js直接赋值
1 | document.getElementById("g-recaptcha-response").innerHTML="TOKEN_FROM_YESCAPTCHA"; |
这样就不验证也可以直接点击提交, 然后回跳转到验证成功页面

完整代码
1 | # -*- coding: utf-8 -*- |
运行结果
|
| |

~~🥳🥳🥳
扫描二维码
获取更多精彩
不止于python
