Friendly Captcha
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).
Parâmetros da solicitação
type<string>requiredCustomTask
class<string>requiredfriendly
websiteURL<string>requiredURL completo da página com o captcha.
websiteKey<string>requiredChave do Friendly Captcha (veja a seção Como encontrar o valor do sitekey).
apiGetLib (dentro de metadata)<string>requiredURL do arquivo JS. Especifique a URL do arquivo JS de acordo com a versão do captcha:
-
V1:
apiGetLib=https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js, ondeX.Y.Zé a versão do cliente obtida no cabeçalhox-frc-client. -
V2:
apiGetLib= URL do arquivosite.min.jscarregado na página. Exemplo:https://cdn.jsdelivr.net/npm/@friendlycaptcha/[email protected]/site.min.js, onde X.Y.Z é a versão do cliente.
Veja também as seções Criar método de tarefa e Como identificar a versão do Friendly Captcha.
userAgent<string>optionalUser-Agent do navegador.
Forneça apenas o UA do Windows atual: userAgentPlaceholder
proxyType<string>requiredhttp - proxy HTTP/HTTPS normal;
https - use se http não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy SOCKS4;
socks5 - proxy SOCKS5.
proxyAddress<string>requiredEndereço IP do proxy (IPv4/IPv6). Não permitido:
- Proxies transparentes
- Proxies da máquina local
proxyPort<integer>requiredPorta do proxy.
proxyLogin<string>requiredLogin do proxy.
proxyPassword<string>requiredSenha do proxy.
Criar método de tarefa
Use o valor do parâmetro apiGetLib em metadata, correspondente à versão do Friendly Captcha.
Exemplo:
Para V1
"apiGetLib": "https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js"
Para V2
"apiGetLib": "https://cdn.jsdelivr.net/npm/@friendlycaptcha/[email protected]/site.min.js"
- CustomTask (sem proxy)
- CustomTask (com proxy)
https://api.capmonster.cloud/createTask
Requisição
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "friendly",
"websiteKey": "FFMGEMAD2K3JJ35P",
"websiteURL": "https://example.com",
"userAgent": "userAgentPlaceholder",
"metadata": {
"apiGetLib":"https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js"
}
}
Resposta
{
"errorId": 0,
"taskId": 407533077
}
https://api.capmonster.cloud/createTask
Requisição
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "friendly",
"websiteKey": "FFMGEMAD2K3JJ35P",
"websiteURL": "https://example.com",
"userAgent": "userAgentPlaceholder",
"metadata": {
"apiGetLib":"https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js"
},
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
Resposta
{
"errorId": 0,
"taskId": 407533077
}
Obter resultado da tarefa
Use o método getTaskResult para obter a solução do Friendly Captcha.
O formato do token na resposta depende da versão do captcha usada no site:
V1: "56a3727f1f9ae4f339c8e512913cd6f8.ac7W...MAKgAAAN+MAQArAAAAjxMBACwAAAB5QgAA.AgAB"
V2: "AQQA.8Q2TbgK_..._pknXDweJjKT2qwmroOhHcZsU4dHyu-jaGIPx9k7432p_num13buuTu6n4lVA=="
https://api.capmonster.cloud/getTaskResult
Requisição
{
"clientKey": "API_KEY",
"taskId": 407533077
}
Resposta
{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"status": "ready",
"solution": {
"data": {
"token": "56a3727f1f9ae4f339c8e512913cd6f8.ac7W...MAKgAAAN+MAQArAAAAjxMBACwAAAB5QgAA.AgAB"
}
}
}
O valor do token obtido deve ser inserido no campo correspondente:
| Versão | Campo para inserção do token |
|---|---|
| V1 | input.frc-captcha-solution |
| V2 | input.frc-captcha-response |
Como encontrar o valor do sitekey
- Para V1, este parâmetro pode ser encontrado em requisições de rede filtrando pelas palavras-chave
sitekeyoupuzzle?sitekey=:

- Para V2, use a busca pelas palavras-chave
sitekeyoudata-sitekeyentre as requisições ou elementos no código da página:

Como identificar a versão do Friendly Captcha
O Friendly Captcha pode ser usado em duas versões principais: V1 e V2. A versão pode ser identificada pelos scripts carregados ou pelas requisições de rede.
Friendly Captcha V1
Usado se os seguintes scripts estiverem presentes na página:
widget.min.js
widget.module.min.js
ou se puzzle?sitekey= aparecer nas requisições de rede:

Para identificar a versão do cliente, você deve:
-
Abrir a requisição
puzzle?sitekey=...encontrada e ir em Headers → Request Headers -
Encontrar o cabeçalho
x-frc-client:

O cabeçalho contém a versão do cliente Friendly Captcha usada no site:
x-frc-client: <version>
Exemplos de valores: 0.9.14, 0.9.19, etc.
- Após identificar a versão em
x-frc-client, insira-a no link CDN:
https://cdn.jsdelivr.net/npm/friendly-challenge@<VERSION>/widget.module.min.js
Por exemplo, se x-frc-client = 0.9.14, use:
https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js
Esse link deve ser passado no parâmetro apiGetLib ao criar a tarefa.
Friendly Captcha V2
Se o arquivo site.min.js for carregado no site, isso significa que está sendo usado o Friendly Captcha V2.
Passe a URL do site.min.js no parâmetro apiGetLib ao criar a tarefa:

Detecção automática da versão do Friendly Captcha
Você pode automatizar o processo de detecção da versão do Friendly Captcha no navegador usando a seguinte solução:
Mostrar código
(async function detectFriendlyCaptcha() {
const result = {
version: null,
clientVersion: null,
indicators: [],
siteMinJsLinks: [],
detectedCdn: null
};
const scripts = Array.from(document.scripts).map(s => s.src);
for (const src of scripts) {
if (!src) continue;
if (src.includes("widget.min.js") || src.includes("widget.module.min.js")) {
result.version = "V1";
result.detectedCdn = src;
result.indicators.push("Found widget script");
}
const match = src.match(/friendly-challenge@(\d+\.\d+\.\d+)/);
if (match) {
result.clientVersion = match[1];
result.version = "V1";
result.detectedCdn = src;
result.indicators.push("Detected CDN version");
}
}
const puzzleElements = document.querySelectorAll(
'[id*="friendly"], [class*="frc"], iframe[src*="friendly"]'
);
if (puzzleElements.length > 0) {
result.indicators.push("Found captcha DOM elements");
if (!result.version) result.version = "V1";
}
const resources = performance.getEntriesByType("resource");
for (const r of resources) {
if (r.name.includes("puzzle?sitekey")) {
result.version = "V1";
result.indicators.push("Found puzzle?sitekey request");
}
}
for (const src of scripts) {
if (!src) continue;
if (src.includes("site.min.js")) {
result.version = "V2";
result.detectedCdn = src;
result.indicators.push("Found site.min.js");
result.siteMinJsLinks.push(src);
}
}
if (!result.version) {
result.version = "Unknown (not detected)";
}
console.log("FriendlyCaptcha Detection Result:");
console.log(result);
return result;
})();
