Pular para o conteúdo principal
Está tendo problemas para obter o token?
Entre em contato com o suporte

Cloudflare Turnstile

Após resolver o CAPTCHA, você receberá um token que deve ser inserido em um campo específico da página. Todos os subtipos do Turnstile são suportados automaticamente: manual, não interativo e invisível. Portanto, não é necessário especificar um subtipo para um captcha padrão.

Mais sobre o tema em nosso blog
Mais sobre o tema em nosso blog

Parâmetros da solicitação

Você deve resolver um captcha Turnstile padrão, como o mostrado aqui. Observe que os captchas em páginas protegidas pelo Cloudflare podem parecer visualmente idênticos. Consulte esta seção para saber como diferenciar um captcha Turnstile padrão de um Cloudflare Challenge.

Atenção!
  • O CapMonster Cloud, por padrão, funciona com proxies integrados — já incluídos no custo do serviço. É necessário especificar seus próprios proxies apenas nos casos em que o site não aceita o token ou quando o acesso aos serviços integrados está restrito.

  • Se o proxy utiliza autenticação por IP, é necessário adicionar o endereço 65.21.190.34 à lista de permissões (whitelist).

  • Após resolver, você receberá um token para confirmar a conclusão do captcha.

type<string>required

TurnstileTask


websiteURL<string>required

A URL da página onde o captcha será resolvido


websiteKey<string>required

Chave do site Turnstile


pageAction<string>optional

O campo action encontrado na função de callback quando o captcha é carregado


data<string>optional

O valor do campo data, obtido do parâmetro cData.


proxyType<string>optional

http - proxy http/https comum;
https - tente esta opção apenas se "http" não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy socks4;
socks5 - proxy socks5.


proxyAddress<string>optional

Endereço IP do proxy IPv4/IPv6. Não é permitido:

  • uso de proxies transparentes (que revelem o IP do cliente);
  • uso de proxies em máquinas locais.


proxyPort<integer>optional

Porta do proxy.


proxyLogin<string>optional

Login do servidor proxy.


proxyPassword<string>optional

Senha do servidor proxy.


Método de criação da tarefa

POST
https://api.capmonster.cloud/createTask

Solicitação

{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "http://tsmanaged.zlsupport.com",
"websiteKey": "0x4AAAAAAABUYP0XeMJF0xoy"
}
}

Resposta

{
"errorId": 0,
"taskId": 407533072
}

Método de obter resultado da tarefa

Use o método getTaskResult para obter o resultado da resolução do Turnstile. Dependendo da carga do sistema, a resposta pode levar de 5 a 20 segundos.

POST
https://api.capmonster.cloud/getTaskResult

Solicitação

{
"clientKey": "API_KEY",
"taskId": 407533072
}

Resposta

{
"errorId": 0,
"status": "ready",
"solution": {
"userAgent": "userAgentPlaceholder",
"token": "0.iGX3xsyFCkbGePM3jP4P4khLo6TrLukt8ZzBvwuQOvbC...f61f3082"
}
}
PropriedadeTipoDescrição
tokenStringUse o token em um campo de input ou ao chamar uma função de callback

Como diferenciar o Cloudflare Turnstile do Cloudflare Challenge

Diferenças entre Turnstile e Challenge

Os tipos de verificação da Cloudflare podem aparecer de formas diferentes.

Turnstile padrão:

Variantes estilizadas:

O Challenge está integrado de forma orgânica no próprio site.

Parece um Turnstile comum, mas na verdade é um Challenge.

Para ter certeza absoluta da presença de um Challenge, você pode abrir as ferramentas de desenvolvedor, analisar o tráfego, estudar o código da página e observar os sinais característicos:

  • A primeira requisição ao site retorna status 403:

  • O formulário com id challenge-form possui atributo action (não confundir com o action do Turnstile captcha) contendo o parâmetro __cf_chl_f_tk=:

  • A página contém duas tags <script> similares que criam novos valores no objeto window:


Como encontrar todos os parâmetros necessários para a criação da tarefa

Manualmente

  1. Abra seu site onde o captcha aparece no navegador.
  2. Clique com o botão direito no elemento do captcha e selecione Inspecionar.

websiteKey

Pode ser encontrado em Elements:

sitekeyTurnstile

sitekeyTurnstile1

pageAction

Action e sitekey também podem ser encontrados na função callback:

callbackTurnstile

Automaticamente

Para automatizar a extração dos parâmetros, eles podem ser obtidos via navegador (normal ou headless, por exemplo, usando Playwright) ou diretamente a partir de requisições HTTP. Como os valores dos parâmetros dinâmicos têm curta duração, recomenda-se utilizá-los imediatamente após a extração.

Importante!

Os trechos de código fornecidos são exemplos básicos para aprendizado sobre como extrair os parâmetros necessários. A implementação exata dependerá do seu site com captcha, sua estrutura e os elementos HTML e seletores utilizados.

Mostrar código (para navegador)
// Função para verificar a presença de window.onloadTurnstileCallback
const checkTurnstileCallback = () => {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject('Callback timeout'), 30000);

const interval = setInterval(() => {
if (window.onloadTurnstileCallback !== undefined) {
clearInterval(interval);
clearTimeout(timeout);

const callbackDetails = window.onloadTurnstileCallback.toString();
const sitekeyMatch = callbackDetails.match(/sitekey: ['"]([^'"]+)['"]/);
const actionMatch = callbackDetails.match(/action: ['"]([^'"]+)['"]/);

resolve({
sitekey: sitekeyMatch ? sitekeyMatch[1] : null,
action: actionMatch ? actionMatch[1] : null,
});
}
}, 500);
});
};

// Tentar encontrar qualquer elemento com data-sitekey
const turnstileElement = document.querySelector('[data-sitekey]');

if (turnstileElement) {
// Extrair o valor do atributo data-sitekey
const sitekey = turnstileElement.getAttribute("data-sitekey");
console.log("Turnstile Sitekey (from element):", sitekey);
} else {
console.log("Turnstile element not found. Checking via callback...");

// Se o elemento não for encontrado, verificar via window.onloadTurnstileCallback
checkTurnstileCallback()
.then((data) => {
console.log("Turnstile Params (from callback):", data);
})
.catch((error) => {
console.error(error);
});
}

Usar biblioteca SDK

Mostrar código (para navegador)
// https://github.com/ZennoLab/capmonstercloud-client-js

import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

document.addEventListener("DOMContentLoaded", async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com", // URL da página com a captcha
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy" // Substitua pelo valor correto
});

// Exemplo de uso do seu próprio proxy
// Descomente este bloco se quiser usar um proxy personalizado

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "proxyLogin",
proxyPassword: "proxyPassword"
};

turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
});
Mostrar código (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

async function solveTurnstile() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com", // URL da página com a captcha
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy" // Substitua pelo valor correto
});

// Exemplo de uso do seu próprio proxy
// Descomente este bloco se quiser usar um proxy personalizado

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "proxyLogin",
proxyPassword: "proxyPassword"
};

turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
}

solveTurnstile().catch(err => console.error("Erro:", err));