电话咨询
19922193247


注意:
类型: 定制-文字点选3 如例图;
说明:带有定制前缀的,是搜集该类图片训练的机器学习模型;请用户检查自己的打码图是否和图例类似, 测试无误后可使用.
1.如遇到服务繁忙,大概率是图片base64的问题,请看常见问题里的:关于base64格式图片的问题;如果确认图片base64无问题,请联系工作人员解决.
2.如遇到无权限访问,用户中心秘钥重置下,再填到代码里的token试试;如果还是不行,请联系工作人员解决.
只支持HTTP中的Post方法,同时Content-Type请设置为application/json或者application/x-www-form-urlencoded
跨平台http接口,请仔细查看各类型的http接口,仅支持post传参
http api 接口 文档
1.1.请求地址
http://api.jfbym.com/api/YmServer/customApi
1.2.参数列表
| 参数名称 | 传值类型 | 说明 | 是否必须 |
|---|---|---|---|
| image | string | 需要识别图片的base64字符串 | 是 |
| token | string | 用户中心Token | 是 |
| type | string | 30116 | 是 |
| 参数名称 | 传值类型 | 说明 |
|---|---|---|
| code | int | 状态值 |
| msg | string | 请求说明 |
| data | array | 打码数据 |
| --code | int | 打码服务状态 |
| --data | string | 数英计算:答案; 滑块:像素距离; 旋转:角度; 坐标类型:按顺序坐标... |
| --time | string | 打码服务时长 |
| code | 说明 |
|---|---|
| 10000 | 识别成功 |
| 10001 | 参数错误 |
| 10002 | 余额不足 |
| 10003 | 无此访问权限 |
| 10004 | 无此验证类型 |
| 10005 | 网络拥塞 |
| 10006 | 数据包过载 |
| 10007 | 服务繁忙 |
| 10008 | 网络错误,请稍后重试 |
| 10009 | 结果准备中,请稍后再试 |
| 10010 | 请求结束 |


import base64
import requests
# www.jfbym.com 注册后登录去用户中心
with open('图片绝对路径/test.png', 'rb') as f:
b = base64.b64encode(f.read()).decode() ## 图片二进制流base64字符串
def verify():
url = "http://api.jfbym.com/api/YmServer/customApi"
data = {
## 关于参数,一般来说有3个;不同类型id可能有不同的参数个数和参数名,找客服获取
"token": "注册后登录去用户中心获取token",
"type": "打码类型id",
"image": b,
}
_headers = {
"Content-Type": "application/json"
}
response = requests.request("POST", url, headers=_headers, json=data).json()
print(response)
if __name__ == '__main__':
verify()
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.jsoup.Jsoup;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import sun.misc.BASE64Encoder;
public class Test {
/**
* 图像识别
* @throws IOException
* 注意: maven依赖
*
*
* org.jsoup
* jsoup
* 1.11.3
*
*
* com.alibaba
* fastjson
* 1.2.70
* test
*
*
*/
public static void main(String[] args) throws IOException {
//注册后用户中心找到token填这儿
String token= "用户中心token";
//类型id 产品列表里找自己需要的产品的id,然后改这儿
String typeid= "10110";
// 图片二进制流base64字符串
String image= "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";
Map< String, String> data = new HashMap<>();
data.put("token",token);
data.put("type", typeid);
data.put("image", image);
String resultString = Jsoup.connect("http://api.jfbym.com/api/YmServer/customApi")
.requestBody(JSON.toJSONString(data))
.header("Content-Type", "application/json")
.ignoreContentType(true).timeout(120000).post().text();
JSONObject jsonObject = JSONObject.parseObject(resultString);
Integer code = jsonObject.getInteger("code");
if (code==10000) {
String result=jsonObject.getJSONObject("data").getString("data");
System.out.println("识别成功结果为:"+result);
}else {
System.out.println("识别失败原因为:"+jsonObject.getString("msg"));
}
}
}
package main
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
const CustomUrl = "http://api.jfbym.com/api/YmServer/customApi"
const Token = ""
func commonVerify(image string) string {
//# 数英汉字类型
//# 通用数英1-4位 10110
//# 通用数英5-8位 10111
//# 通用数英9~11位 10112
//# 通用数英12位及以上 10113
//# 通用数英1~6位plus 10103
//# 定制-数英5位~qcs 9001
//# 定制-纯数字4位 193
//# 中文类型
//# 通用中文字符1~2位 10114
//# 通用中文字符 3~5位 10115
//# 通用中文字符6~8位 10116
//# 通用中文字符9位及以上 10117
//# 定制-XX西游苦行中文字符 10107
//# 计算类型
//# 通用数字计算题 50100
//# 通用中文计算题 50101
//# 定制-计算题 cni 452
config := map[string]interface{}{}
config["image"] = image
config["type"] = "10110"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func slideVerify(slideImage string, backgroundImage string) string {
//# 滑块类型
//# 通用双图滑块 20111
// # slide_image 需要识别图片的小图片的base64字符串
// # background_image 需要识别图片的背景图片的base64字符串(背景图需还原)
config := map[string]interface{}{}
config["slide_image"] = slideImage
config["background_image"] = backgroundImage
config["type"] = "20111"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func sinSlideVerify(image string) string {
//# 滑块类型
//# 通用单图滑块(截图) 20110
config := map[string]interface{}{}
config["image"] = image
config["type"] = "20110"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func trafficSlideVerify(seed string, data string, href string) string {
//# 滑块类型
//# 定制-滑块协议slide_traffic 900010
config := map[string]interface{}{}
config["seed"] = seed
config["data"] = data
config["href"] = href
config["type"] = "900010"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
_data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(_data), err)
return string(data)
}
func clickVerify(image string, extra interface{}) string {
//# 通用任意点选1~4个坐标 30009
//# 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
//# 定制-文字点选2(extra="click",原图) 30103
//# 定制-单图文字点选 30102
//# 定制-图标点选1(原图) 30104
//# 定制-图标点选2(原图,extra="icon") 30105
//# 定制-语序点选1(原图,extra="phrase") 30106
//# 定制-语序点选2(原图) 30107
//# 定制-空间推理点选1(原图,extra="请点击xxx") 30109
//# 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
//# 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
//# 定制-tt_空间点选 30101
//# 定制-推理拼图1(原图,extra="交换2个图块") 30108
//# 定制-xy4九宫格点选(原图,label_image,image) 30008
// # 定制-文字点选3(extra="je4_click") 30112
//# 定制-图标点选3(extra="je4_icon") 30113
//# 定制-语序点选3(extra="je4_phrase") 30114
//# 如有其他未知类型,请联系我们
config := map[string]interface{}{}
config["image"] = image
if extra != nil {
config["extra"] = extra
}
config["type"] = "30100"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func rotate(image string) string {
// # 定制-X度单图旋转 90007
config := map[string]interface{}{}
//# 定制-Tt双图旋转,2张图,内圈图,外圈图 90004
//config["out_ring_image"] = image
//config["inner_circle_image"] = image
//config["type"] = "90004"
config["image"] = image
config["type"] = "90007"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
type Result struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data Data `json:"data"`
}
type Data struct {
Code int `json:"code"`
CaptchaId string `json:"captchaId"`
RecordId string `json:"recordId"`
Data string `json:"data"`
}
func googleVerify(googlekey string, pageurl string) string {
config := map[string]interface{}{}
//第一步,创建验证码任务
//:param
//:return taskId : string 创建成功的任务ID
url1 := "http://api.jfbym.com/api/YmServer/funnelApi"
config["token"] = Token
config["type"] = "40010" // v2
//config["type"] = "40011" // v3
config["googlekey"] = googlekey
config["pageurl"] = pageurl
config["enterprise"] = 0 //是否为企业版
config["invisible"] = 0 //是否为可见类型
config["data-s"] = "" //## V2+企业如果能找到,找不到传空字符串
//config["action"] = "" //## #V3必传
//config["min_score"] = "0.8" //#V3才支持的可选参数
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(url1, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
//data := `{"msg": "识别成功", "code": 10000, "data": {"code": 0, "captchaId": "51436618130", "recordId": "74892"}}`
fmt.Println(data)
var res Result
_ = json.Unmarshal([]byte(data), &res)
captchaId := res.Data.CaptchaId
recordId := res.Data.RecordId
config1 := map[string]interface{}{}
timeOut := 120
times := 0
for {
if times > timeOut {
fmt.Println("超时")
break
}
url2 := "http://api.jfbym.com/api/YmServer/funnelApiResult"
config1["token"] = Token
config1["captchaId"] = captchaId
config1["recordId"] = recordId
configData, _ := json.Marshal(config1)
body := bytes.NewBuffer([]byte(configData))
resp, _ := http.Post(url2, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
//data := `{"msg": "请求成功", "code": 10001, "data": {"data": "03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6"}}`
fmt.Println(data)
var res Result
_ = json.Unmarshal([]byte(data), &res)
if res.Code != 10001 {
continue
time.Sleep(time.Duration(5) * time.Second)
times += 5
}
return res.Data.Data
}
return string(data)
}
func hcaptchaVerify(siteKey string, siteUrl string) string {
//# Hcaptcha
//# 请保证购买相应服务后请求对应 verify_type
//# verify_type="50001"
config := map[string]interface{}{}
config["site_key"] = siteKey
config["site_url"] = siteUrl
config["type"] = "50001"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func funCaptchaVerify(siteKey string, siteUrl string) string {
//# Hcaptcha
//# 请保证购买相应服务后请求对应 verify_type
//# verify_type="40007"
config := map[string]interface{}{}
config["publickey"] = siteKey
config["pageurl"] = siteUrl
config["type"] = "40007"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func main() {
// 作者水平有限,各位使用者在调用过程中自行修改
resp, _ := http.Get("https://www.78gk.com/haoma/MTc2NjUxMDk4NTg=")
body, _ := ioutil.ReadAll(resp.Body)
b64Str := base64.StdEncoding.EncodeToString([]byte(body))
commonVerify(b64Str)
fmt.Println(b64Str)
}
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
// 使用前 先导入图灵插件 按键精灵软件 最上面有个叫资源库的,里面的插件图灵插件 然后再把神梦http插件安装上,
// 把下方链接下载下来的ddl文件复制到 按键精灵安装的地方的的下面的plugin 例如(D:\Program Files (x86)\按键精灵\按键精灵2014\plugin) 文件里
//(链接: https://pan.baidu.com/s/1QIKjtitqP9Gycws0W-gcsw?pwd=yunm 提取码: yunm 复制这段内容后打开百度网盘手机App,操作更方便哦)
Function UrlEncode(url)
encode = ""
For i = 1 To Len(url)
char = Mid(url, i, 1)
asci = Asc(char)
If (asci >= 48 and asci <= 57) or (asci >= 65 and asci <= 90) or (asci >= 97 and asci <= 122) Then
encode = encode & char
ElseIf asci = 32 Then
encode = encode & "+"
Else
encode = encode & "%" & Hex(asci)
End If
Next
UrlEncode = encode
End Function
token="云码用户中心token"
img_base64 = Plugin.TURING.Image_Base64Encode("C:\Users\xxx\Desktop\2eeb2db57b39d19d4c8c5e82705367e8.png") // 图片地址需要改
img_base64 = Replace(img_base64, "%", "%25")
img_base64 = Replace(img_base64, "+", "%2B")
img_base64 = Replace(img_base64, " ", "%20")
img_base64 = Replace(img_base64, "/", "%2F")
img_base64 = Replace(img_base64, "?", "%3F")
img_base64 = Replace(img_base64, "#", "%23")
img_base64 = Replace(img_base64, "&", "%26")
img_base64 = Replace(img_base64, "=", "%3D")
TracePrint img_base64
Param = "&image=" & img_base64 & "&token=" & UrlEncode(token) & "&type=使用类型id 需要改"
TracePrint Param
返回结果json = Plugin.SMWH.WinHttp("http://api.jfbym.com/api/YmServer/customApi", 1, param ,"" ,"" ,"","Content-Type: application/json; charset=UTF-8","","","","","","","UTF-8")
TracePrint 返回结果json
result = Plugin.SMWH.GetJSON(返回结果json, "data.data")
TracePrint result
【 // # 数英汉字类型】】 【 // # 通用数英1-4位 10110】 【 // # 通用数英5-8位 10111】 【 // # 通用数英9~11位 10112】 【 // # 通用数英12位及以上 10113】 【 // # 通用数英1~6位plus 10103 该类型识别率较高】 【 // # 定制-数英5位~qcs 9001】 【 // # 定制-纯数字4位 193】 【 // # 中文类型】 【 // # 通用中文字符1~2位 10114】 【 // # 通用中文字符 3~5位 10115】 【 // # 通用中文字符6~8位 10116】 【 // # 通用中文字符9位及以上 10117】 【 // # 定制-XX西游苦行中文字符 10107】 【 // # 计算类型】 【 // # 通用数字计算题 50100】 【 // # 通用中文计算题 50101】 【 // ## 定制-计算题 cni 452】 【 // # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型】 【 // # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100】 【 // # # 定制-文字点选2(extra="click",原图) 30103】 【 // # # 定制-单图文字点选 30102】 【 // # # 定制-图标点选1(原图) 30104】 【 // # # 定制-图标点选2(原图,extra="icon") 30105】 【 // # # 定制-语序点选1(原图,extra="phrase") 30106】 【 // # # 定制-语序点选2(原图) 30107】 【 // # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109】 【 // # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110】 【 // # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009】 【 // # # 定制-tt_空间点选 30101】 【 // # # 定制-推理拼图1(原图,extra="交换2个图块") 30108】 【 // # # 定制-xy4九宫格点选(原图,label_image,image) 30008】 【 // # # 点选二字TX 30111】 【 代码例子下载地址: 链接: 】 【 https://pan.baidu.com/s/1EfsgCPv-EpNuiuPV58gSCA?pwd=yunm 提取码: yunm 复制这段内容后打开百度网盘手机App,操作更方便哦】 .版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 网页_发包 () .子程序 网页_发包, , , 本子程序由【YZYZ-菜鸟编程小助手】生成 .局部变量 局_地址, 文本型, , , 调用精易模块 http://ec.125.la/ .局部变量 局_提交, 文本型 .局部变量 局_返回, 文本型 .局部变量 token, 文本型 .局部变量 type, 文本型 .局部变量 image, 文本型 token = “用户中心token” type = “识别类型id” image = 编码_BASE64编码 (读入文件 (取运行目录 () + “\” + “1.png”)) 局_地址 = “http://api.jfbym.com/api/YmServer/customApi” 局_提交 = “{” + #引号 + “token” + #引号 + “: ” + #引号 + token + #引号 + “,” + #引号 + “type” + #引号 + “: ” + #引号 + type + #引号 + “,” + #引号 + “image” + #引号 + “: ” + #引号 + image + #引号 + “}” 调试输出 (image) 局_返回 = 编码_Utf8到Ansi (网页_访问_对象 (局_地址, 1, 局_提交, , , “Content-Type: application/json;charset=utf-8”, , , , , , , , , , , )) 调试输出 (局_返回)
// RestSharp 用法不了解的请百度 RestSharp教程
var client = new RestClient("http://api.jfbym.com/api/YmServer/customApi");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("token", "用户中心token");
request.AddParameter("image", "图片的base64(注意不含:data:image/jpg;base64,直接图片base64编码)");
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
request.AddParameter("type", "10110");
//其他参数根据需要从 http 接口文档中添加
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
curl --location --request POST 'http://api.jfbym.com/api/YmServer/customApi' \
--header 'Content-Type: application/json' \
--data-raw '{"token": "用户中心密钥","type": "识别类型","image": "图片base64字符串"}'
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, "http://api.jfbym.com/api/YmServer/verifyapi");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
const char *data = "{\"token\": \"用户中心密钥\",\"type\": \"识别类型code\",\"image\": \"图片base64字符串\"}";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
var axios = require('axios');
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
var data = JSON.stringify({
"token": "用户中心密钥",
"type": "识别类型code",
"image": "图片base64字符串"
});
var config = {
method: 'post',
url: 'http://api.jfbym.com/api/YmServer/customApi',
headers: {
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
//请自行测试更改
// SHTTP.lua 山海师http双端插件 玩按键精灵的都知道吧,
//这个插件地址 http://bbs.anjian.com/showtopic.aspx?topicid=697539&forumpage=1&onlyauthor=1&posterid=742060
// 或 链接: https://pan.baidu.com/s/1fvWC1GAXRCsCn1D6B6V4jg?pwd=jppw 提取码:jppw
Import "SHTTP.lua"
Import "ShanHai.lua"
Import "Cjson.lua"
//用户中心token
Dim token = ""
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
Dim type = "10110"
Dim sUrl = "http://api.jfbym.com/api/YmServer/customApi"
Dim sJson, tJson,res,img_base64
Dim filePath = "/Pictures/111.png"
// 需要先将图片转成base64编码
TracePrint GetSdcardDir()
img_base64 = ShanHai.ReadFileBase(GetSdcardDir() & filePath)
TracePrint img_base64
//base64 出来的类似这种
//img_base64 = "/9j/2wCEACgcHiMeGSgjISMtKygwPGRBPDc3PHtYXUlkkYCZlo+AjIqgtObDoKrarYqMyP/L2u71////m8H////6/+b9//gBKy0tPDU8dkFBdviljKX4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+P/AABEIACsA+gMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/ANmiiigAooyNxXIyBkiigAoqtc3LxyJDCm+VxnBOAB6mi3uXaZoJ4wkoG4YOQw9qALNFFFABRRRQAUUUZGQM8mgAooooAKz9OsJrS4lkkmDhxjjPzc9T7/41oUUAFFFFABRVeK5M106RqDEgwz+/oKsUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADBDGszShAJGGC2OSKfRRQBTh51W4J6qigfSi441OzI6kOD9MUXCyQXYuY4zIrLtdV6+xpIFluLv7TJGY1VdqK3X3NAF2ioUuUad4SQrqcBSwyeM9P8/nkCagAooooARyyoSq7mA4GetZclzMdQhZrVwUVvlDA5zWrUZgU3InydwXbjtQAsMhkjDFGQns3Wn0UUAFFFFABVW9lfKW8P+skzz6CrVVbqKUTx3EKhmQEFScZFAEUBlsTFDKFMbnaHXsfersj7FzsZhnnbzgev/wCqqZE93LHviMUaNuO48k1eoAjS4idggbDnorAqx/A81JQQGGCARnPNNjkjlXdG6uM4ypzQA6iiigCo9xcu5SC3xg43yHA/Kp4BIqYmdXfrwMVHPDPM+FuDHHjoo5/Olt7SK3JZMlm6sxyTQA+QzBv3ccbDHVnI/oab5s6/ft93p5bg/nnFTUUAQ+fJ/wA+s35p/wDFUefJ/wA+s35p/wDFVNRQBD9qj/uzf9+X/wAKPtUf92b/AL8v/hU1FABRRRQAUUUUAFFFFACOiyKVdQynqCMilUBVCqAABgAdqKKACiiigAooooAKKKKACiiigAooooAKKKKAGyxiWJ42yA6lTj3qrp9gLFX/AHhcuRk4x0//AF1cooAKKKKAI5JljbDCQnGfljZv5Cm/ao/7s3/fl/8ACpqKAIftUf8Adm/78v8A4Ufao/7s3/fl/wDCpqKAIftUf92b/vy/+FTKdygjOCM8jFFFABRRRQB//9k="
// replace special word in img_base64
img_base64 = Replace(img_base64, "%", "%25")
img_base64 = Replace(img_base64, "+", "%2B")
img_base64 = Replace(img_base64, " ", "%20")
img_base64 = Replace(img_base64, "/", "%2F")
img_base64 = Replace(img_base64, "?", "%3F")
img_base64 = Replace(img_base64, "#", "%23")
img_base64 = Replace(img_base64, "&", "%26")
img_base64 = Replace(img_base64, "=", "%3D")
token = Replace(token, "%", "%25")
token = Replace(token, "+", "%2B")
token = Replace(token, " ", "%20")
token = Replace(token, "/", "%2F")
token = Replace(token, "?", "%3F")
token = Replace(token, "#", "%23")
token = Replace(token, "&", "%26")
token = Replace(token, "=", "%3D")
Dim tData = {null}
tData["token"] = token
tData["type"] = type
tData["image"] = img_base64
res = SHTTP.Post(sUrl,tData,{"headers":{"Content-Type":"application/x-www-form-urlencoded"}})
TracePrint res
// 如果报错,请看 https://blog.csdn.net/qq_40081339/article/details/104762948
tJson = Cjson.Decode(res)
TracePrint tJson
//注意:部分接口支持报错返分,请不要乱报错,后台人员会核对,如乱报错,可能会冻结账号;uniqueCode 识别请求返回参数
//uniqueCode = Replace(uniqueCode, "%", "%25")
//uniqueCode = Replace(uniqueCode, "+", "%2B")
//uniqueCode = Replace(uniqueCode, " ", "%20")
//uniqueCode = Replace(uniqueCode, "/", "%2F")
//uniqueCode = Replace(uniqueCode, "?", "%3F")
//uniqueCode = Replace(uniqueCode, "#", "%23")
//uniqueCode = Replace(uniqueCode, "&", "%26")
//uniqueCode = Replace(uniqueCode, "=", "%3D")
//Dim rData = {null}
//Dim rUrl = "http://api.jfbym.com/api/YmServer/refundApi"
//rData["token"] = token
//rData["uniqueCode"] = uniqueCode
//res = SHTTP.Post(rUrl,rData,{"headers":{"Content-Type":"application/x-www-form-urlencoded"}})
//TracePrint res
//tJson = Cjson.Decode(sJson)
//TracePrint tJson
if (!requestScreenCapture()) {
console.show()
toastLog("请求截图失败");
exit();
} else {
toastLog("请求截图成功");
}
captureScreen("/storage/emulated/0/Pictures/1.png");
var clip = images.clip(images.read("/storage/emulated/0/Pictures/1.png"), 10, 102, 529 - 10, 618 - 180);
let res = http.post("http://api.jfbym.com/api/YmServer/customApi", {
'image': images.toBase64(clip),
'token': '用户中心token',
'type': '识别类型id',
});
let html = res.body.string();//取页面html源码
console.log(html);
res_data = html.split('data":"')[1].split('","time')[0]
log(res_data)
function base64Decode(str) {
//base64解码字符集
var _base64DecodeChars = [
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
];
var c1, c2, c3, c4;
var i, len, out;
len = str.length;
i = 0;
out = "";
while (i < len) {
/* c1 */
do {
c1 = _base64DecodeChars[str.charCodeAt(i++) & 0xff];
}
while (i < len && c1 == -1);
if (c1 == -1)
break;
/* c2 */
do {
c2 = _base64DecodeChars[str.charCodeAt(i++) & 0xff];
}
while (i < len && c2 == -1);
if (c2 == -1)
break;
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
/* c3 */
do {
c3 = str.charCodeAt(i++) & 0xff;
if (c3 == 61)
return out;
c3 = _base64DecodeChars[c3];
}
while (i < len && c3 == -1);
if (c3 == -1)
break;
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
/* c4 */
do {
c4 = str.charCodeAt(i++) & 0xff;
if (c4 == 61)
return out;
c4 = _base64DecodeChars[c4];
}
while (i < len && c4 == -1);
if (c4 == -1)
break;
out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
}
// return out; // 会中文乱码
return decodeURIComponent(escape(out)); // 解决中文乱码
}};
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
功能 接口上传()
变量 图片 = base64encodefile("C:\\2.jpg")//图片路径,需要改成自己的路径
变量 token = "请输入自己的token"
变量 识别类型 = "识别类型id"
变量 send_data = "{\"token\":\"" & token & "\",\"type\":\"" & 识别类型 & "\",\"image\":\"" & 图片 & "\"}"
变量 header = array("Content-Type" = "application/json")
变量 请求返回 = http提交请求("post", "http://api.jfbym.com/api/YmServer/customApi", send_data, "utf-8", header)
调试输出(请求返回)
if(字符串查找(请求返回, "识别成功") > 0)
请求返回 = 转字符型(请求返回)
变量 计算_1 = 字符串查找(请求返回, "data")
计算_1 = 字符串截取(请求返回, 计算_1 + 4, 字符串长度(请求返回))
变量 计算_2 = 字符串查找(计算_1, "data")
变量 计算_3 = 字符串查找(计算_1, "time")
变量 识别结果 = 字符串截取(计算_1, 计算_2 + 4, 计算_3 - 3)
traceprint("识别结果 " & 识别结果)
end
结束
function main(){
var url = "http://api.jfbym.com/api/YmServer/customApi";
var token=xxx; //用户中心密钥
var type=10110;//根据开发文档进行修改
var autoimg = image.captureScreen(3,0,0,300,400);//截图
var imageBase64=image.toBase64(autoimg);//图片转base64
//图片要回收
image.recycle(autoimg);
//下面是基本参数,需要其他参数的根据文档模仿添加
var pa = {"token":token,"type":type,"image":imageBase64};
var x = http.postJSON(url, pa, 100 * 1000, null);
toast(" x返回数据-> " + x)
var jsonResult = JSON.parse(JSON.stringify(x));
if(jsonResult.code==10000){
toast(" data-> " + jsonResult.data.data);//识别结果
toast(" unique_code-> " + jsonResult.data.unique_code);//用于报错
}else{
toast(" msg-> " + jsonResult.msg);//错误原因
}
}
main();
function main(){
var url = "http://api.jfbym.com/api/YmServer/customApi";
var token=xxx; //用户中心密钥
var type=10110;//根据开发文档进行修改
var autoimg = image.captureScreen(3,0,0,300,400);//截图
var imageBase64=image.toBase64(autoimg);//图片转base64
//图片要回收
image.recycle(autoimg);
//下面是基本参数,需要其他参数的根据文档模仿添加
var pa = {"token":token,"type":type,"image":imageBase64};
var x = http.postJSON(url, pa, 100 * 1000, null);
toast(" x返回数据-> " + x)
var jsonResult = JSON.parse(x);
if(jsonResult.code==10000){
toast(" data-> " + jsonResult.data.data);//识别结果
toast(" unique_code-> " + jsonResult.data.unique_code);//用于报错
}else{
toast(" msg-> " + jsonResult.msg);//错误原因
}
}
main();--url = url地址
--path = 图片路径
--token = 密匙
--type = 图片类型id
function 图片识别(path)
import('java.lang.*')
import('java.util.*')
import('com.nx.assist.lua.LuaEngine')
local url="http://api.jfbym.com/api/YmServer/customApi"
local path = "/sdcard/Pictures/2.png" --图片路径
local token = "" --云码用户中心token
local type = "10110" --图片类型id
local base64 = getFileBase64(path)
print("base64:" .. base64 )
local params = {}
params["image"] = base64
params["token"] = token
params["type"] = type
local headers = {}
headers["User-Agent"]
= "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3"
local postRet = LuaEngine.httpPost(url,params,headers,60)
if postRet ~= nil then
local json = jsonLib.decode(postRet)
if json["msg"] == "识别成功" then
return json["data"]["data"]
end
end
end
print("验证码:" .. 图片识别(path) )
function 云码(imagePath)
local url="http://api.jfbym.com/api/YmServer/customApi" --接口地址
local token = "" --云码用户中心token
local type = "20120" --填入需要的图片类型id
local filedata = file.read(imagePath);
local imagebase64 = codec.base64.encode(filedata);
-- string.gsub("abcdabcd","a","z");
imagebase64 = string.gsub( imagebase64,"%%", "%%25");
imagebase64 = string.gsub( imagebase64,"+", "%%2B");
imagebase64 = string.gsub( imagebase64," ", "%%20");
imagebase64 = string.gsub( imagebase64,"/", "%%2F");
imagebase64 = string.gsub( imagebase64,"?", "%%3F");
imagebase64 = string.gsub( imagebase64,"#", "%%23");
imagebase64 = string.gsub( imagebase64,"&", "%%26");
imagebase64 = string.gsub( imagebase64,"=", "%%3D");
local urldata = "image=" .. imagebase64 .. "&token=" .. token .. "&type=" .. type .."&developer_tag=5241a574ed042e07267fd3e493a069ad"
-- logDebug( urldata);
header = {}
header["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"
data, status = net.http.post(url, header, urldata, 30)
logDebug(data); -- 响应数据
logDebug(status);
end
function main()
云码('/mnt/sdcard/touchelf/scripts/1.png')
end
#######触摸精灵#####
## 谷歌获取参数, 查看版本
按F12,进入console, 输入自动定义函数findRecaptchaClients()
```
function findRecaptchaClients() {
// eslint-disable-next-line camelcase
if (typeof (___grecaptcha_cfg) !== 'undefined') {
// eslint-disable-next-line camelcase, no-undef
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object');
objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(([_, value]) => (
value && typeof value === 'object' && 'sitekey' in value && 'size' in value
));
if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV'){
data.pageurl = toplevel.baseURI;
}
if (found) {
const [sublevelKey, sublevel] = found;
data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
return [];
}
```
然后在consolse执行这个函数findRecaptchaClients() 即可找到出对应的信息
其中,version字段为版本
其中,sitekey
其中,pageurl
```
[
{
"id": "0",
"version": "V2",
"sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
"function": "onSuccess",
"callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
"pageurl": "https://www.google.com/recaptcha/api2/demo"
}
]
```
## Hcaptcha获取参数
打开网页,按F12->Elements,搜索关键词data-sitekey
data-sitekey就是参数websiteKey,
`
` websiteURL一般就是当前网页的域名,
reCaptcha v3 需要action值,而且必须正确,
通过网页源代码中搜索关键词 grecaptcha :
其中action: xxxxx 就是我们要的值,例如:
grecaptcha.ready(function() { grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', 3{action: 'login'}).then(function(token) { }); });

如果网页中搜索不到,则可能是js被混肴、加密了,需要尝试其他方式
enterprise.jsreCaptcha v2 企业版:请求链接不含render参数,或者render参数为explicit,例如:
https://recaptcha.net/recaptcha/enterprise.js?render=explicit&hl=zh-cn
reCaptcha v3 企业版:请求链接含有render参数,并且render参数不等于explicit,例如:
https://www.google.com/recaptcha/enterprise.js?render=6LeP9okbAAAAANjfmUxqLDJvHZtqvXr_Fg34FhP-

3.判断 invisible 参数
查看reCAPTCHA 的 iframe 链接包含参数 size=invisible 例如:

这种为 隐形版本 ,传参时,invisible="1"
另外一种:

这种为 非隐形版本 ,传参时,invisible="0" 或者不传.
现在我们得到这个resonse值了,然后应该怎么通过这个该死的验证呢?
{ "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnUJCZrgjwLLdt7cb0..." }
我们要明白,我们这个接口,并不是一个能自动帮你点图片的工具,
这是一个模拟谷歌服务器直接给你返回正确的结果(response)的工具,
你拿到了这个正确的结果(response),接下来就应该把这个结果提交给你要登陆的网站,
告诉它,你已经通过验证了!
那么问题来了,应该如何提交给网站呢?一般有两种情况:
也就是post数据包的方式提交给网站,
注意: 一般抓包观察提交请求的其中一个参数有我们返回的令牌数据,有可能在提交参数里,也有可能在请求头里;
著需要把我们这个返回的参数填到这个位置提交就能通过.根本不需要浏览器.
这时候观察一下你正常提交时,浏览器发送的请求的参数名,一般为g-recaptcha-response,
如下图所示,把我们正确的结果(response)提交,就能通过验证了。
这是最简单,也是推荐的方式。

2.第二种,模拟操作
或者 直接执行js 通过selenium 执行 注入
(function (response) {
const ele = document.getElementById("g-recaptcha-response");
if (ele) {
ele.innerHTML = response;
ele.text = response;
}
const base = Object.values(___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 && typeof base[k0][k1].callback === 'function') {
base[k0][k1].callback(response);
return true;
}
}
}
return false;
})('你在平台获取的RESPONSE');
.版本 2
.支持库 spec
.程序集 验证码
.子程序 请求实例, , , 依赖包!!! 【鱼刺类.HTTP】 链接:https://pan.baidu.com/s/1StEutzyXBaUeQ9NQSygG_g?pwd=ABCD 提取码:ABCD
.局部变量 postJson, zyJsonValue
.局部变量 resJson, zyJsonValue
.局部变量 apiUrl, 文本型
.局部变量 heads, 文本型
.局部变量 data, 文本型
.局部变量 http, WinHttpW
.局部变量 response, 文本型
' 第一步:创建任务
postJson.创建 ()
apiUrl = “http://api.jfbym.com/api/YmServer/funnelApi”
heads = “Content-Type: application/json”
postJson.置文本 (“token”, “”)
postJson.置文本 (“type”, “40004”)
postJson.置文本 (“googlekey”, “”)
postJson.置文本 (“pageurl”, “”)
postJson.置文本 (“invisible”, “1”)
postJson.置文本 (“action”, “login”)
postJson.置文本 (“enterprise”, “1”)
data = postJson.到文本 ()
http.Open (“POST”, apiUrl)
http.SetRequestHeaders (heads)
.如果真 (http.Send (data) = 假)
postJson.置文本 (“msg”, “发送失败!”)
response = postJson.到文本 ()
.如果真结束
response = http.GetResponseTextA ()
.如果真 (resJson.解析 (response) = 假)
信息框 (“请求异常”, 0, , )
.如果真结束
调试输出 (response)
' 第二步:循环获取答案
apiUrl1 = “http://api.jfbym.com/api/YmServer/funnelApiResult”
postJson.置文本 (“token”, “”)
postJson.置文本 (“captchaId”, “第一步获取的captchaId”)
postJson.置文本 (“recordId”, “第一步获取的recordId”)
data = postJson.到文本 ()
http.Open (“POST”, apiUrl)
http.SetRequestHeaders (heads)
.如果真 (http.Send (data) = 假)
postJson.置文本 (“msg”, “发送失败!”)
response = postJson.到文本 ()
.如果真结束
response = http.GetResponseTextA ()
.如果真 (resJson.解析 (response) = 假)
信息框 (“请求异常”, 0, , )
.如果真结束
调试输出 (response)
data-sitekeydata-sitekey就是参数 site_key

site_url 一般就是当前网页的域名
2、打开包含的网页,按F12->Network,搜索关键词hcaptcha
找到一个请求:其中sitekey就是我们需要的 site_key
https://hcaptcha.com/checksiteconfig?v=4ad5c92&host=democaptcha.com&sitekey=51829642-2cda-4b09-896c-594f89d700cc&sc=1&swa=1

import json
import time
import requests
class YdmVerify(object):
_custom_url = "http://api.jfbym.com/api/YmServer/customApi"
_token = ""
_headers = {
'Content-Type': 'application/json'}
def google_verify(self, googlekey, pageurl, invisible=1, data_s=""):
_headers = {
'Content-Type': 'application/json'
}
"""
第一步,创建验证码任务
:param
:return taskId : string 创建成功的任务ID
"""
url = "http://122.9.52.147/api/YmServer/funnelApi"
payload = json.dumps({
"token": self._token,
# "type": "40011", ## v3
"type": "40010", ## v2
"googlekey": googlekey,
"enterprise": 1, ## 是否为企业版
"pageurl": pageurl,
"invisible": invisible,
"data-s": data_s,
# 'action':"TEMPLATE" #V3必传
})
# 发送JSON格式的数据
result = requests.request("POST", url, headers=_headers, data=payload).json()
print(result)
# {'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'captchaId': '51436618130', 'recordId': '74892'}}
captcha_id = result.get('data').get("captchaId")
record_id = result.get('data').get("recordId")
times = 0
while times < 150:
try:
url = f"http://122.9.52.147/api/YmServer/funnelApiResult"
data = {
"token": self._token,
"captchaId": captcha_id,
"recordId": record_id
}
result = requests.post(url, headers=_headers, json=data).json()
print(result)
# {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}
if result['msg'] == "结果准备中,请稍后再试":
time.sleep(5)
times += 5
continue
if result['msg'] == '请求成功' and result['code'] == 10001:
print(result['data']['data'])
return result['data']['data']
# {'msg': '请求成功', 'code': 10001, 'data': {'data': '03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6MYBJGFQxMUIApFfSBN6WTGspk6DmFdQAoWxynObRGV7qNMQOjZ_m4w3_6iRu8SJ3vSUXH_HHuA7wXARJbKEpU4J4R921NfpKdahgeFD8rK1CFYAqLd5fz4l-8_VRmRE83dRSfkgyTN338evQ1doWKJRipZbk4ie-89Ud0KGdOsP4QzG3stRZgj2oaEoMDSAP62vxKGYqtDEqTcwtlgo-ot3rF5SmntaoKGwcKPo0NrekWA5gtj0vqKLU6lY2GcnSci_tgBzBwuH40uvyR1PFu02VK_E44mopJ7FOO4cUukNaLGqypU2YCA8QuaaebOIoCMU7RGqGs_41RYNCG1GSdthiwcwk2hHFbi-TXuICXSwh4Er5mgVW9A3t_9Ndp0eJcyr3HtuJrcA7BtlcgruuQxK5h4Ew4ert4KPH_aQGN9ww5VsUtbSManzUDnUOs7aEdvFk1DOOPmLys-aX20ZFN2CcQcZZSO-7HZpZZt3EDeWWE5S02HFDY8gl3_0xqIts8774Tr4GMVJaddG0NR6pcBFC11FqNcK2a18gM3gaKDy3_2ZMeSU4nj4NWwoAhPjQN2BS8JxX4kKVpX4rD959kc93vczVD3TYD6_4GJahGSpBvM7Y5_GGIdLL8imXde1R35mZnEcFYXQ40zcy3DdJFkk_gzGTVOEb1Q1IZpjMxzCxyGgwjgL9dtDIgst5H5CSZoerX_Lz-DmsBvYIYZdpbPLEMROx9MODImaEw8Cp6M8Xj7_foijiGE9hh-pzJSTlKl3HytiSUyJJ7r1BssrX5C_TFWxl0IXNg8azP8H-ZIOWwnYlMWCS1w9piHdoLg5zACiYIN3Txdlsvi61MuPmzJggJd1_dlyMdAlzb5_zdfweqj0_Ko1ODP378YT7sV7LECgRj5QJU6sF5nlf4m2g5sFypBw9GFAkEE-OaWGYxRJOy2ioU41ggAJIkcza2B_N5AL2KLROtm0-c2MxplM4ZzHxrUv9A24zlgzo3Pz4NONwU_gaOcDB7j1dZKXD8UaoIrZv0BTd8JeojYowm9Usdg7Rt4Fpo_vDLJdrEUfbxVlXieDD9Fr1fu72-d4AduT_J3n-rIhyX4gFav-KfP-qOxqOZsmjXZirsBxZs7042NYeirRYnLv35cxIAJARz03FJmeKViUivwC5mCWw64hjRad9XyyBOP2n8KFOrTXhPskC-WwEfksGtfLxi6VW76FHGvRdwHXzMwVfNqe3P5H_WZUc-vxeTAsTnqZz3WA97lM4MLrX0nTZYgXxCEiS6raSOiEMqcx_Nv7Zxre-abj4LZRbFpH8nx1SEiaOV2Dm-a1iPFEmCs0L4kDtt6VImSVIQaTOAd3KFSo7W_XTvRPsQJOtblrcKyuagztX_Yr0lT0YqN9I9MZAARo7M5OfwSLJW16rdmp4NuRefEvNPNHO2cVh1Xha1qNGuF_QDvWFFmWG0Y6IbRqLmF-Dv8BY4TWyOeVnADJftGQw2QSr8RmbCHryA'}}
except Exception as e:
print(e)
continue
def fun_captcha_verify(self, publickey, pageurl, verify_type="40007"):
# 定制类接口-Hcaptcha 40007
payload = {
"publickey": publickey,
"pageurl": pageurl,
"token": self._token,
"type": verify_type
}
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def hcaptcha_verify(self):
# 定制类接口-Hcaptcha
_headers = {
'Content-Type': 'application/json'
}
_custom_url = "http://api.jfbym.com/api/YmServer/funnelApi"
payload = {
"sitekey": "9a955efe-a6f1-47ac-a433-6e0a317577b3",
"pageurl": "https://breachforums.st/member?action=login",
"token": self._token,
"type": '50013'
}
result = requests.post(_custom_url, headers=_headers, data=json.dumps(payload)).json()
print(result)
captcha_id = result.get('data').get("captchaId")
record_id = result.get('data').get("recordId")
times = 0
while times < 150:
try:
url = f"http://api.jfbym.com/api/YmServer/funnelApiResult"
data = {
"token": self._token,
"captchaId": captcha_id,
"recordId": record_id
}
result = requests.post(url, headers=_headers, json=data).json()
print(result)
# {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}
if result['msg'] == "结果准备中,请稍后再试":
time.sleep(5)
times += 5
continue
if result['msg'] == '请求成功' and result['code'] == 10001:
print(result['data']['data'])
return result['data']['data']
# {'msg': '请求成功', 'code': 10001, 'data': {'data': '03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6MYBJGFQxMUIApFfSBN6WTGspk6DmFdQAoWxynObRGV7qNMQOjZ_m4w3_6iRu8SJ3vSUXH_HHuA7wXARJbKEpU4J4R921NfpKdahgeFD8rK1CFYAqLd5fz4l-8_VRmRE83dRSfkgyTN338evQ1doWKJRipZbk4ie-89Ud0KGdOsP4QzG3stRZgj2oaEoMDSAP62vxKGYqtDEqTcwtlgo-ot3rF5SmntaoKGwcKPo0NrekWA5gtj0vqKLU6lY2GcnSci_tgBzBwuH40uvyR1PFu02VK_E44mopJ7FOO4cUukNaLGqypU2YCA8QuaaebOIoCMU7RGqGs_41RYNCG1GSdthiwcwk2hHFbi-TXuICXSwh4Er5mgVW9A3t_9Ndp0eJcyr3HtuJrcA7BtlcgruuQxK5h4Ew4ert4KPH_aQGN9ww5VsUtbSManzUDnUOs7aEdvFk1DOOPmLys-aX20ZFN2CcQcZZSO-7HZpZZt3EDeWWE5S02HFDY8gl3_0xqIts8774Tr4GMVJaddG0NR6pcBFC11FqNcK2a18gM3gaKDy3_2ZMeSU4nj4NWwoAhPjQN2BS8JxX4kKVpX4rD959kc93vczVD3TYD6_4GJahGSpBvM7Y5_GGIdLL8imXde1R35mZnEcFYXQ40zcy3DdJFkk_gzGTVOEb1Q1IZpjMxzCxyGgwjgL9dtDIgst5H5CSZoerX_Lz-DmsBvYIYZdpbPLEMROx9MODImaEw8Cp6M8Xj7_foijiGE9hh-pzJSTlKl3HytiSUyJJ7r1BssrX5C_TFWxl0IXNg8azP8H-ZIOWwnYlMWCS1w9piHdoLg5zACiYIN3Txdlsvi61MuPmzJggJd1_dlyMdAlzb5_zdfweqj0_Ko1ODP378YT7sV7LECgRj5QJU6sF5nlf4m2g5sFypBw9GFAkEE-OaWGYxRJOy2ioU41ggAJIkcza2B_N5AL2KLROtm0-c2MxplM4ZzHxrUv9A24zlgzo3Pz4NONwU_gaOcDB7j1dZKXD8UaoIrZv0BTd8JeojYowm9Usdg7Rt4Fpo_vDLJdrEUfbxVlXieDD9Fr1fu72-d4AduT_J3n-rIhyX4gFav-KfP-qOxqOZsmjXZirsBxZs7042NYeirRYnLv35cxIAJARz03FJmeKViUivwC5mCWw64hjRad9XyyBOP2n8KFOrTXhPskC-WwEfksGtfLxi6VW76FHGvRdwHXzMwVfNqe3P5H_WZUc-vxeTAsTnqZz3WA97lM4MLrX0nTZYgXxCEiS6raSOiEMqcx_Nv7Zxre-abj4LZRbFpH8nx1SEiaOV2Dm-a1iPFEmCs0L4kDtt6VImSVIQaTOAd3KFSo7W_XTvRPsQJOtblrcKyuagztX_Yr0lT0YqN9I9MZAARo7M5OfwSLJW16rdmp4NuRefEvNPNHO2cVh1Xha1qNGuF_QDvWFFmWG0Y6IbRqLmF-Dv8BY4TWyOeVnADJftGQw2QSr8RmbCHryA'}}
except Exception as e:
print(e)
continue
if __name__ == '__main__':
y = YdmVerify()
y.hcaptcha_verify()
当报错 服务繁忙,可能原因是图片问题,先检查下图片。如确认无误,联系客服解决
base64要上传正确的字符

在辅助软件上获取到的数据可能是这样:
data:image/jpeg;base64,/9j/5AAFmv39/+AAEEpGSUYAAQEAAAEAAQAA/9sA..................
这张图的正确base64字符是以下:
/9j/5AAFmv39/+AAEEpGSUYAAQEAAAEAAQAA/9sA..................
base64字符串里别误操作加入空格,或是换行符等。这样会破坏base64字符串,造成不是图片或是图片不完整
按键精灵pc版本 如何解析返回的json字符串 详细内容可点击请看以下链接 http://bbs.anjian.com/showtopic-697721-1.aspx
温馨提示:我们将在您提交信息后的30分钟内与您取得联系,请您保持电话通畅,谢谢!
