27

谷歌验证码端口二: /v3/recaptcha

 3 years ago
source link: https://shimo.im/docs/5o4z8XhhvsUSzYFa/read
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

最近更新: 7月7日, 周三

Python DEMO

Yescaptcha验证码DEMO requests版本

Yescaptcha验证码DEMO selenium版本

创建识别任务

请求线路:(通用线路)http://api.yescaptcha.365world.com.cn

(特殊线路)http://hk.yescaptcha.365world.com.cn

(无特殊情况建议选择通用线路, 通用线路速度更快。)

请求路径: /v3/recaptcha/create

(这个路径不代表验证码版本,版本区分请看下面的参数)

请求方式: GET

参数名

是否必须

说明

token

请在个人中心获取 (Token)

siteKey

ReCaptcha SiteKey (固定参数)

siteReferer

ReCaptcha Referer (一般也为固定参数)

captchaType

(验证码版本)

ReCaptchaV2(默认) / ReCaptchaV3(

不知道是哪一种看后面的说明

siteAction

ReCaptchaV3 选填 Action动作 默认verify

minScore

ReCaptchaV3 选填 最小分数(0.1-0.9)

http://api.yescaptcha.365world.com.cn/v3/recaptcha/create?token=6a982a4ac259d3acfead916546c2&siteKey=6LeQblAUAAAAAHIxpoTyzyKHd_2AbdDjSGcyhHSJ&siteReferer=https://www.example.com/
"status": 0,
"msg": "ok",
"data": {
"taskId": "141600207" // 请记录此ID
获取识别结果

一般来说识别会在2分钟内完成,一般为10s~80s秒

建议用户设置查询间隔 3-5s ,一个任务最多可以查询40次。

注意: ReCaptcha 识别成功后有效期约为2分钟 请尽快使用!

服务端口: http://api.yescaptcha.365world.com.cn

请求路径: /v3/recaptcha/status

请求方式: GET

taskId

创建任务获取到的ID

http://api.yescaptcha.365world.com.cn/v3/recaptcha/status?token=6a982a4ac259d3acfead916546c2&taskId=141600207
  "status": 0,
"msg": "ok",
  "data": {
    "status": "Success",
    "reason": null,
    "response": "03AERD8Xra*********2Ft1xoteuSZ7SA" // ReCaptcha识别结果

请根据 data 中的 status 判断

status

Working

Success

识别失败 请参考 Reason

验证码类型说明
ReCaptchaV2 图片点选

参数 captchaType

ReCaptchaV2

验证码类型说明:(点选后,需要选择图片确认==说明这是V2验证码)

KGPJDHsDJ15nKdfy.png!thumbnail

PSTAJVmkjiFdGFgN.png!thumbnail

ReCaptchaV3 无感验证

参数 captchaType

ReCaptchaV3

验证码类型说明:(不需要任何操作,自动进行验证,仅在右下角有小图标==说明这是V3验证码)

2aRSgptLoaEHlAyL.png!thumbnail
如何获取 ReCaptcha 参数
判断是 V2 还是 V3

通常 V2 是可以看到的, V3 是隐藏的

用浏览器打开你要识别网址 按F12,打开Network,刷新网页,找到这个请求

hIaWDYvz7tsSH4Pk.png!thumbnail

带有 render 的是 v3 (参考 ReCaptcha 官方部署文档)

获取 SiteKey / SiteReferer

QRAAyEyGzPMe1E30.png!thumbnail

key 和 referer 如红框所示

找不到怎么办

找不到的话,搜索ancher或者api,看到了吗,右边k=xxxx这个参数就是sitekey

bReFWEenGuJmK70b.png!thumbnail

获取 SiteAction (V3)

一般来说搜索 grecaptcha 可以找到

W6BsFyqtzMIPtETK.png!thumbnail

各种语言的DEMO
Postman demo 可以查看不同语言DEMO(Python/PHP等等)
h6EdXcWruLlTSDWr.png!thumbnail
具体如何使用?

首先我们已经学会怎么获得基本参数,然后也学会怎么调用接口了(创建任务ID(TaskId),再拿任务ID去获取response)。

不会的话,看一下各种语言的DEMO,如果你使用的是按钮精灵或者易语言,可以搜索一下比如:易语言如何调用resfull api

然后我们应该怎么通过这个该死的验证码呢?

我们要明白,我们这个接口,并不是一个能自动帮你点图片的工具,这是一个模拟谷歌服务器直接给你返回正确的结果(response)的工具,你拿到了这个正确的结果(response),接下来就应该把这个结果提交给你要登陆的网站,告诉它,你已经通过验证了。

那么问题来了,应该如何提交给网站呢?一般有两种情况:

1.我们写的是协议提交(post),也就是post数据包的方式提交给网站,这时候观察一下你正常提交时,浏览器发送的参数名,一般为g-recaptcha-response,如下图所示,把我们正确的结果(response)提交,就能通过验证了。

这是最简单,也是推荐的方式。

7YLpOWawBP5lxVKK.png!thumbnail

2.第二种,我们使用按键精灵,或者Python的selenium自动化工具,在屏幕上点点点操作的方式,这种叫模拟操作,那么这种如何使用正确的结果(response)提交呢,请听:我们正常点击验证码之后,在网页上,一般会有一个地方存放这个结果,这个地方一般是这样的:

<textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" ></textarea>

jph1yB3QGJRwQAyM.png!thumbnail

这个地方有一个ID叫g-recaptcha-response的textarea,当你点击正确通过验证码之后,谷歌会把正确的结果(response)保存在这里,然后随着表单一起提交。

这时候我们利用的方式就是,把我们通过接口获得的正确的结果(response),写入到这里,然后一起提交(这里我们已经通过接口生成了正确的结果(response),所以不再需要去点验证码了!)

具体怎么操作,可以参见下面的两种整合方式:

如何和模拟整合

一般来说, 我们推荐用户使用协议, 但是模拟依然可以整合我们的API

ReCaptcha 包含两种方式, 一种是非回调, 一种是回调

ReCaptcha 会生成一个 textarea 用来存放 token, 我们可以手动写入

document.getElementById("g-recaptcha-response").innerHTML = "RESPONSE";
document.getElementById("g-recaptcha-response").text= "RESPONSE";
两种回调方式

找到 ReCaptcha 所在元素中的参数

查data-callback="myCallbackFunction"
  1. JS render
看grecaptcha.render('example', {
'sitekey' : 'someSitekey',
'callback' : myCallbackFunction,
'theme' : 'dark'

我们有一种比较懒的方式来获取 Callback Function, 在 React VUE 等情况也可以使用

各// 手动写入
myCallbackFunction = ___grecaptcha_cfg.clients[0].o.o.callback
// 自动查找
function myCallbackFunction(response) {
const base = ___grecaptcha_cfg.clients[0];
for (let k0 of Object.keys(base)) {
    for (let k1 of Object.keys(base[k0])) {
        if (base[k0][k1].callback) {
base[k0][k1].callback(response);
return true;
return false
  1. 页面上存在多个 ReCaptcha 的时候, 可以是 clients[1], clients[2]...
  1. 路径不一定固定为 o.o, 最好使用自动查找方式

得到 myCallbackFunction 之后, 我们只需要调用

种myCallbackFunction("RESPONSE")
全类型自动注入 (测试)
(function (response) {
const ele = document.getElementById("g-recaptcha-response");
if (ele) {
ele.innerHTML = response;
ele.text = response;
const base = ___grecaptcha_cfg.clients[0];
for (let k0 of Object.keys(base)) {
for (let k1 of Object.keys(base[k0])) {
if (base[k0][k1] && base[k0][k1].callback) {
base[k0][k1].callback(response);
return true;
return false;
})('你在平台获取的RESPONSE');
返回错误提示

返回时各种错误代码提示

    "status": -1,
    "msg": "Not enough points",
    "data": {}

msg 错误提示内容

Token error

TOKEN错误,请检查TOKEN是否正确

(长度、空格等情况)

Token not found

TOKEN不存在,请检查TOKEN是否正确

(个人中心的TOKEN)

Not enough points

余额不存,请充值

Page Not found

页面不存在,请检查URL路径是否正确

Internal Server Error

服务器出现错误,请联系管理员

Missing required field

缺少必要字段,请检查字段是否完整

(siteReferer、siteKey)

Create Task Failed

任务创建失败(偶尔会出现,不会扣费,请重试)

This task has failed

Taskid已经失败(偶尔会出现,不会扣费,请重试)

Invalid Taskid

TaskId不存在

Token with Taskid not Match

Taskid非本TOKEN帐户创建

Not Exists / Wrong taskId

任务状态异常(极少会出现,不会扣费,请重试)

Server unavailable now

服务器不可用,请联系管理员

Other error

未分类的其他错误,请联系管理员


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK