什么是 Tencent Captcha(TenDI)以及如何解决它?
Tencent Captcha 是由腾讯公司开发的一种自动化行为防护系统。它广泛应用于各类在线平台,例如电商网站、社交网络和金融服务,用于防止垃圾信息、欺诈行为以及其他类型的滥用行为。
Tencent Captcha 的主要验证形式是滑块验证码,它要求用户移动滑块,使拼图碎片正确对齐:
此外,还会出现图形验证码,用户需要按顺序点击指定的目标元素:
作为替代方案,用户可能会被要求完成语音验证码的识别:
腾讯还提供智能验证(或“智能检查”),类似于 Google reCAPTCHA 等其他系统。该智能验证使用机器学习算法和用户行为分析来判断网站上的操作是否真实,还是自动化攻击行为。
CapMonster Cloud 可以帮助绕过大多数不同类型的验证码,包括 Tencent Captcha。为此,需要向服务器发送请求:https://api.capmonster.cloud/createTask,使用 POST 方法并以 JSON 格式提交,请求应如下所示:
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "TenDI",
"websiteURL": "https://example.com",
"websiteKey": "189123456",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36",
"metadata": {
"captchaUrl": "https://global.captcha.example.com/TCaptcha-global.js"
}
}
}请求中使用的参数:
| type | String | 是 | CustomTask |
| class | String | 是 | TenDI |
| websiteURL | String | 是 | 验证码所在的主页面地址 |
| websiteKey | String | 是 | captchaAppId。例如 "websiteKey": "189123456",可从 HTML 页面或流量中获取 |
| captchaUrl(metadata 内) | String | 否 | 验证码脚本地址,通常以 TCaptcha.js 或 TCaptcha-global.js 结尾 |
| userAgent | String | 否 | 浏览器 User-Agent。请仅传递来自 Windows 系统的最新 UA |
成功返回示例(JSON 格式):
{
"errorId": 0,
"taskId": 407533072
}获取结果示例:
方法 getTaskResult:向地址 https://api.capmonster.cloud/getTaskResult 发送 POST 请求,传入 task_id,以从服务获取解题结果:
{
"clientKey":"API_KEY",
"taskId": 407533072
}响应:
{
"errorId": 0,
"status": "ready",
"solution": {
"data": {
"randstr": "@EcL",
"ticket": "tr03lHUhdnuW3neJZu.....7LrIbs*"
},
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
}
}
}randstr —— 随机字符串,是 Tencent Captcha 解决方案的一部分,用于识别和验证验证码结果。
ticket —— 唯一标识符,同样属于验证码结果的一部分,用于确认验证通过并获取受保护内容或功能的访问权限。
为了向自动识别服务器发送请求,需要提前获取验证码的唯一标识符 —— websiteKey(captchaAppId)。
获取方法非常简单:
在浏览器中打开包含验证码的页面。
触发并显示验证码。
打开 开发者工具(Developer Tools)。
切换到 网络(Network)选项卡。
在网络请求中找到包含参数 aid 的请求——这就是该页面验证码的标识符。
示例:

我们将给出使用 CapMonster Cloud 服务在 JavaScript 和 Python 语言中解决该类型验证码的脚本示例,并使用该服务的官方库。
Node.js:
// https://github.com/CapMonsterCloud/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, TenDIRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // 请填写你的 CapMonster Cloud API Key
async function solveTenDI() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// 基础示例(不使用代理)
// CapMonster Cloud 会自动使用其代理
let tenDIRequest = new TenDIRequest({
websiteURL: "https://example.com", // 验证码页面 URL
websiteKey: "183268248", // 请替换为正确的值
});
// 使用自定义代理示例
// 如果需要使用自己的代理,请取消注释以下代码块
/*
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
tenDIRequest = new TenDIRequest({
websiteURL: "https://example.com",
websiteKey: "websiteKey",
proxy,
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
});
*/
// 如有需要,可以检查余额
const balance = await client.getBalance();
console.log("Balance:", balance);
const result = await client.Solve(tenDIRequest);
console.log("Solution:", result);
}
solveTenDI().catch(console.error);Python:
# https://github.com/CapMonsterCloud/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TenDiCustomTaskRequest
# from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo # 如果需要使用代理请取消注释
API_KEY = "YOUR_API_KEY" # 请填写你的 CapMonster Cloud API Key
async def solve_tendi_custom():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# 基础示例(不使用代理)
# CapMonster Cloud 会自动使用其代理
tendi_request = TenDiCustomTaskRequest(
websiteUrl="https://example.com", # Tencent(TenDI)验证码页面 URL
websiteKey="189956587", # TencentCaptcha appid
userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
)
# 使用自定义代理示例
# 如果需要使用代理,请取消注释以下代码块
#
# proxy = ProxyInfo(
# proxyType="http",
# proxyAddress="123.45.67.89",
# proxyPort=8080,
# proxyLogin="username",
# proxyPassword="password"
# )
#
# tendi_request = TenDiCustomTaskRequest(
# websiteUrl="https://example.com",
# websiteKey="189956587",
# userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36",
# proxy=proxy
# )
# 如有需要,可以检查余额
balance = await cap_monster_client.get_balance()
print("Balance:", balance)
result = await cap_monster_client.solve_captcha(tendi_request)
print("Solution:", result)
asyncio.run(solve_tendi_custom())请查看我们的工具与解决方案,以便轻松解决 Tencent Captcha 及其他类型的验证码:
CapMonster Cloud 浏览器扩展 Chrome / Firefox
NB:请注意,该产品仅用于自动化测试您自己拥有合法访问权限的网站和资源。