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

reCAPTCHA v2 Enterprise

Exemplos de tarefas

Abaixo estão exemplos das variantes de reCAPTCHA v2 Enterprise compatíveis com o CapMonster Cloud:

O objeto contém os dados da tarefa para resolver o ReCaptcha2 Enterprise do Google. Para garantir a universalidade da resolução desse tipo de CAPTCHA, precisamos utilizar todos os dados usados durante a automação do preenchimento do formulário no site de destino, incluindo proxy, UserAgent do navegador e cookies. Isso ajuda a evitar possíveis problemas caso o Google altere o código da CAPTCHA. Esse tipo de CAPTCHA não apresenta diferenças visuais em relação ao ReCaptcha v.2. A diferença pode ser identificada pelo código da CAPTCHA, por exemplo, nas ferramentas de desenvolvedor, na guia Network, nas solicitações: URL da solicitação (anchor): https://www.google.com/recaptcha/enterprise/anchor?ar=1&k=6Lf26sUnAAAAAIKLuWNYgRsFUfmI-3Lex3xT5N-s&co=aHR0cHM6Ly8yY2FwdGNoYS5jb206NDQz&hl=en&v=1kRDYC3bfA-o6-tsWzIBvp7k&size=normal&cb=43r1q2d3mx66 A resolução desse tipo de CAPTCHA pode levar mais tempo do que a de uma CAPTCHA comum, mas o valor g-recaptcha-response obtido permanece válido por mais 60 segundos após a resolução da CAPTCHA.

Mais sobre o tema em nosso blog
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).

Parâmetros da solicitação

type<string>required

RecaptchaV2EnterpriseTask


websiteURL<string>required

Endereço de uma página da web com o Google ReCaptcha Enterprise.


websiteKey<string>required

Chave de identificação do reCAPTCHA na página de destino.
Por exemplo, o valor de websiteKey pode ser encontrado no código HTML da página:

<div class="g-recaptcha" data-sitekey="THIS_ONE"></div>

ou no URL do atributo src do elemento iframe:

<iframe title="reCAPTCHA" src="...;k=6LdIFr0ZAAAAAO3vz0O0OQrtAefzdJcWQM2TMYQH&amp;...">

Neste exemplo, 6LdIFr0ZAAAAAO3vz0O0OQrtAefzdJcWQM2TMYQH é o valor do parâmetro websiteKey.


pageAction<string>optional

O valor do parâmetro action enviado pelo widget ReCaptcha ao Google, que posteriormente é visível ao proprietário do site durante a verificação. Especifique este parâmetro se seu valor for diferente do padrão: verify

Exemplo em HTML:
grecaptcha.execute('site_key', {action:'login_test'}).


enterprisePayload<object>optional

Objeto com parâmetros adicionais do reCAPTCHA Enterprise.

Parâmetros do objeto:

  • sstring, parâmetro adicional do reCAPTCHA Enterprise que pode ser enviado para grecaptcha.enterprise.render junto com sitekey.

Por exemplo:

grecaptcha.enterprise.render("some-div-id", {
sitekey: "6Lc_aCMTAAAAABx7u2N0D1XnVbI_v6ZdbM6rYf16",
theme: "dark",
s: "2JvUXHNTnZl1Jb6WEvbDyB...ugQA"
});

apiDomain<string>optional

Endereço do domínio a partir do qual carregar o reCAPTCHA Enterprise. Por exemplo:
- www.google.com
- www.recaptcha.net

Não utilize um parâmetro se você não souber por que ele é necessário.


userAgent<string>optional

Use o valor atual compatível com o CapMonster Cloud: userAgentPlaceholder

Você pode obter o valor mais recente em: https://capmonster.cloud/api/useragent/actual.


cookies<string>optional

Cookies adicionais que devemos usar durante a interação com a página de destino ou com o Google.
Formato: cookiename1=cookievalue1; cookiename2=cookievalue2


proxyType<string>optional

http - proxy http/https regular;
https - tente essa 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:

  • usar proxies transparentes (onde você pode ver o IP do cliente);
  • usar 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.


Para obter o parâmetro s de enterprisePayload, substitua a função grecaptcha.enterprise.render antes que ela seja chamada e extraia o valor do objeto de parâmetros transmitido. A função fica disponível após o carregamento do script, e a CAPTCHA geralmente é renderizada imediatamente ou por um evento da página, portanto a interceptação deve ser configurada com antecedência. A função original pode ser chamada sem o campo s.

apiDomain é o domínio que hospeda a interface da API usada para interagir com o reCAPTCHA e verificar se o usuário concluiu a CAPTCHA.

Script
var __test_grc = undefined;

var __test_enterprise = undefined;

var __test_render = undefined;

var __test_render_widget = undefined;

var __test_render_args = undefined; // aqui ficará o objeto com o qual render é chamado.

var __test_handler = {
get: function(target, name, receiver) {
if (name == 'enterprise') {
return __test_enterprise ? __test_enterprise : (__test_enterprise = new Proxy(target[name], __test_handler));
} else if (name == 'render') {
__test_render = target[name];
return (function(a, b) {
__test_render_args = b;
__test_render_widget = a;
return __test_render(a, {sitekey: b.sitekey}); });
} else {
return target[name];
}
}
};

Object.defineProperty(window, 'grecaptcha', {
enumerable: true,
configurable: false,
get: function() {
return __test_grc;
},
set: function(value) {
__test_grc = new Proxy(value, __test_handler);
}
});

Criar método de tarefa

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

Exemplo de requisição

{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2EnterpriseTask",
"websiteURL": "https://mydomain.com/page-with-recaptcha-enterprise",
"websiteKey": "your-website-key",
"enterprisePayload": {
"s": "your-value"
}
}
}

Exemplo de resposta:

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

Método Get task result

Use o método getTaskResult para solicitar a resposta para o ReCaptcha2. Você receberá a resposta em um período de 10 a 80 segundos, dependendo da carga de trabalho do serviço.

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

Exemplo de requisição

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

Exemplo de resposta

{
"errorId":0,
"status":"ready",
"solution": {
"gRecaptchaResponse":"3AHJ_VuvYIBNBW5yyv0zRYJ75VkOKvhKj9_xGBJKnQimF72rfoq3Iy-DyGHMwLAo6a3"
}
}

PropriedadeTipoDescrição
gRecaptchaResponseStringHash que deve ser inserido no formulário de envio do Recaptcha2 em <textarea id="g-recaptcha-response" ..></textarea>. Tem um comprimento de 500 a 2190 bytes.

Como encontrar todos os parâmetros necessários para criar a tarefa

Manualmente

  1. Abra no navegador o site em que a CAPTCHA é exibida.
  2. Clique com o botão direito no elemento da CAPTCHA e selecione Inspect.

websiteKey

Chave pública do site (sitekey). Você pode encontrar a websiteKey em Elements:

sitekeyEntpr

Ou nas requisições de Network:

sitekeyEntpr1

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 (no navegador)
(() => {
const payload = {};
let sitekey = null;

document.querySelectorAll('.g-recaptcha').forEach(div => {
if (div.dataset.sitekey) sitekey = div.dataset.sitekey;

for (const [key, value] of Object.entries(div.dataset)) {
if (key !== 'sitekey') {
payload[key] = value;
}
}
});

const scriptTags = Array.from(document.querySelectorAll("script:not([src])"));
const regex = /grecaptcha\.enterprise\.render\([^,]+,\s*\{(.*?)\}/s;

scriptTags.forEach(tag => {
const match = regex.exec(tag.textContent);
if (match) {
const obj = match[1];
const paramRegex = /(\w+)\s*:\s*['"]([^'"]+)['"]/g;
let p;
while ((p = paramRegex.exec(obj)) !== null) {
const key = p[1];
const val = p[2];
if (key === "sitekey") sitekey = val;
else payload[key] = val;
}
}
});

console.log("sitekey:", sitekey);
console.log("enterprisePayload:", payload);
})();
Mostrar código (Node.js)
import { chromium } from 'playwright';

(async () => {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();

let sitekey = null;
const enterprisePayload = {};

const targetUrl = 'https://example.com';
await page.goto(targetUrl, { timeout: 60000 });
await page.waitForTimeout(3000);

const recaptchaDivs = await page.$$('.g-recaptcha');
for (const div of recaptchaDivs) {
const attrs = ['data-sitekey', 'data-s', 'data-cdata', 'data-type', 'data-context'];
for (const attr of attrs) {
const val = await div.getAttribute(attr);
if (val) {
const key = attr.replace('data-', '');
if (key === 'sitekey') {
sitekey = val;
} else {
enterprisePayload[key] = val;
}
}
}
}

const inlineScripts = await page.$$eval("script:not([src])", (scripts) =>
scripts.map((s) => s.textContent)
);

const pattern = /grecaptcha\.enterprise\.render\([^,]+,\s*\{(.*?)\}/s;

for (const script of inlineScripts) {
const match = script.match(pattern);
if (match) {
const obj = match[1];
const keyValuePattern = /(\w+)\s*:\s*['"]([^'"]+)['"]/g;
let keyValueMatch;
while ((keyValueMatch = keyValuePattern.exec(obj)) !== null) {
const key = keyValueMatch[1];
const val = keyValueMatch[2];
if (key === 'sitekey') {
sitekey = val;
} else {
enterprisePayload[key] = val;
}
}
break;
}
}

console.log(`sitekey: ${sitekey}`);
console.log("enterprisePayload:");
for (const [key, value] of Object.entries(enterprisePayload)) {
console.log(` ${key}: ${value}`);
}

await browser.close();
})();

Usar biblioteca SDK

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

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

document.addEventListener('DOMContentLoaded', async () => {

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

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

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let recaptchaV2EnterpriseRequest = new RecaptchaV2EnterpriseRequest({
websiteURL: "https://mydomain.com/page-with-recaptcha-enterprise", // URL da página com a CAPTCHA
websiteKey: "your-website-key", // Substitua pelo valor correto
enterprisePayload: {
s: "your-value", // Parâmetro Enterprise opcional
}
});

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

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

recaptchaV2EnterpriseRequest = new RecaptchaV2EnterpriseRequest({
websiteURL: "https://mydomain.com/page-with-recaptcha-enterprise",
websiteKey: "your-website-key",
enterprisePayload: { s: "your-value" },
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(recaptchaV2EnterpriseRequest);
console.log("Solution:", result);
});
Mostrar código (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

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

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

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let recaptchaV2EnterpriseRequest = new RecaptchaV2EnterpriseRequest({
websiteURL: "https://mydomain.com/page-with-recaptcha-enterprise", // URL da página com a CAPTCHA
websiteKey: "your-website-key", // Substitua pelo valor correto
enterprisePayload: {
s: "your-value", // Parâmetro Enterprise opcional
}
});

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

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

recaptchaV2EnterpriseRequest = new RecaptchaV2EnterpriseRequest({
websiteURL: "https://mydomain.com/page-with-recaptcha-enterprise",
websiteKey: "your-website-key",
enterprisePayload: { s: "your-value" },
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(recaptchaV2EnterpriseRequest);
console.log("Solution:", result);
}

solveRecaptchaV2Enterprise().catch(console.error);
Mais sobre o tema em nosso blog