TenDI - Captcha da Tencent
Essa tarefa será realizada usando nossos servidores proxy.
Parâmetros da solicitação
type
<string>requiredCustomTask
class
<string>requiredTenDI
websiteURL
<string>requiredO endereço da página principal onde o captcha é resolvido.
websiteKey
<string>requiredcaptchaAppId. Por exemplo, "websiteKey": "189123456"
é um parâmetro único para seu site. Você pode obtê-lo de uma página HTML com captcha ou a partir do tráfego (veja a descrição abaixo).
metadata.captchaUrl
<string>optionalLink para o script do captcha. Normalmente termina com TCaptcha.js
ou TCaptcha-global.js
. Pode ser encontrado na lista de requisições (veja o exemplo abaixo).
userAgent
<string>optionalO User-Agent do navegador. Passe apenas o UA real de um sistema operacional Windows. Atualmente, a versão é: userAgentPlaceholder
proxyType
<string>optionalhttp - proxy regular http/https;
https - use essa opção apenas se "http" não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy socks4;
socks5 - proxy socks5.
proxyAddress
<string>optionalEndereço IP do proxy IPv4/IPv6. Não permitido:
- uso de nomes de host;
- uso de proxies transparentes (onde é possível ver o IP do cliente);
- uso de proxies em máquinas locais.
proxyPort
<integer>optionalPorta do proxy.
proxyLogin
<string>optionalLogin do servidor proxy.
proxyPassword
<string>optionalSenha do servidor proxy.
Como obter websiteKey (captchaAppId)
Ative as Ferramentas de Desenvolvedor, vá para a aba Network, ative o captcha e veja as solicitações. Algumas delas conterão o valor do parâmetro que você precisa. Nesse caso, websiteKey=aid
Como obter captchaUrl
Abra Ferramentas de Desenvolvedor, vá para a aba Network, ative o captcha e examine as requisições de rede. Entre elas aparecerá TCaptcha.js
ou TCaptcha-global.js
, no qual você pode encontrar um link semelhante a este:
Método de criação da tarefa
https://api.capmonster.cloud/createTask
Solicitação
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "TenDI",
"websiteURL": "https://example.com",
"websiteKey": "189123456",
"userAgent": "userAgentPlaceholder"
}
}
Resposta
{
"errorId":0,
"taskId":407533072
}
Método de obter resultado da tarefa
Use o método getTaskResult para obter a solução do TenDI.
https://api.capmonster.cloud/getTaskResult
Solicitação
{
"clientKey":"API_KEY",
"taskId": 407533072
}
Resposta
{
"errorId":0,
"status":"ready",
"solution": {
"data": {
"randstr": "@EcL",
"ticket": "tr03lHUhdnuW3neJZu.....7LrIbs*"
},
"headers": {
"User-Agent": "userAgentPlaceholder"
}
}
}
Como Encontrar Todos os Parâmetros Necessários para a Criação da Tarefa
Automaticamente
Uma forma conveniente de automatizar a busca por todos os parâmetros necessários.
Alguns parâmetros são regenerados a cada carregamento da página, então você precisará extraí-los através de um navegador — seja normal ou headless (por exemplo, usando Playwright).
Como os valores dos parâmetros dinâmicos são de curta duração, o captcha deve ser resolvido imediatamente após a captura deles.
Os trechos de código fornecidos são exemplos básicos para familiarização com a extração dos parâmetros necessários. A implementação exata dependerá da sua página de captcha, sua estrutura e dos elementos/seletores HTML que ela utiliza.
- JavaScript
- Python
- C#
Mostrar código (Node.js)
import { chromium } from "playwright";
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
// Interceptar requisições
page.on("request", (request) => {
const url = request.url();
if (
url.startsWith("https://sg.captcha.qcloud.com/cap_union_prehandle?aid=")
) {
const parsedUrl = new URL(url);
const aid = parsedUrl.searchParams.get("aid");
console.log("Aid extraído:", aid);
}
});
await page.goto("https://www.example.com/", { waitUntil: "load" });
await page.waitForTimeout(5000);
await browser.close();
})();
Mostrar código
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
# Interceptar requisições
page.on("request", lambda request: handle_request(request))
await page.goto("https://www.example.com/", wait_until="load")
await asyncio.sleep(5)
await browser.close()
def handle_request(request):
url = request.url
if url.startswith("https://sg.captcha.qcloud.com/cap_union_prehandle?aid="):
parsed_url = request.url.split('?')[1]
params = dict(param.split('=') for param in parsed_url.split('&') if '=' in param)
aid = params.get('aid')
print("Aid extraído:", aid)
asyncio.run(main())
Mostrar código
using System;
using System.Threading.Tasks;
using Microsoft.Playwright;
class Program
{
public static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions {
Headless = false });
var page = await browser.NewPageAsync();
// Interceptar requisições
page.Request += (_, request) =>
{
var url = request.Url;
if (url.StartsWith("https://sg.captcha.qcloud.com/cap_union_prehandle?aid="))
{
var uri = new Uri(url);
var queryParams = System.Web.HttpUtility.ParseQueryString(uri.Query);
var aid = queryParams.Get("aid");
Console.WriteLine("Aid extraído: " + aid);
}
};
await page.GotoAsync("https://www.example.com/", new PageGotoOptions {
WaitUntil = WaitUntilState.Load });
await Task.Delay(5000);
await browser.CloseAsync();
}
}
Usar biblioteca SDK
- JavaScript
- Python
- C#
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, TenDIRequest } from '@zennolab_com/capmonstercloud-client';
document.addEventListener('DOMContentLoaded', async () => {
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: '<your capmonster.cloud API key>' }));
console.log(await cmcClient.getBalance());
const tenDIRequest = new TenDIRequest({
websiteURL: 'https://example.com',
websiteKey: 'websiteKey',
});
console.log(await cmcClient.Solve(tenDIRequest));
});
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TenDiCustomTaskProxylessRequest
client_options = ClientOptions(api_key="your_api_key") # Replace with your CapMonster Cloud API key
cap_monster_client = CapMonsterClient(options=client_options)
ten_di_request = TenDiCustomTaskProxylessRequest(
websiteUrl="https://example.com", # URL with the captcha
websiteKey="189956587", # Replace with the website key for the captcha
userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" # Use the current userAgent
)
async def solve_captcha():
return await cap_monster_client.solve_captcha(ten_di_request)
responses = asyncio.run(solve_captcha())
print(responses)
// https://github.com/ZennoLab/capmonstercloud-client-dotnet
using Zennolab.CapMonsterCloud.Requests;
using Zennolab.CapMonsterCloud;
class Program
{
static async Task Main(string[] args)
{
var clientOptions = new ClientOptions
{
ClientKey = "your_api_key" // Replace with your CapMonster Cloud API key
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
var tenDiRequest = new TenDiCustomTaskProxylessRequest
{
WebsiteUrl = "https://example.com", // URL with the captcha
WebsiteKey = "189956587", // Replace with the correct website key
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" // Use the current userAgent
};
var tenDiRequestResult = await cmCloudClient.SolveAsync(tenDiRequest);
Console.WriteLine("Captcha Solution: " + string.Join(", ", tenDiRequestResult.Solution.Data));
Console.WriteLine("Captcha Solution: " + string.Join(", ", tenDiRequestResult.Solution.Headers));
}
}