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.
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>requiredRecaptchaV2EnterpriseTask
websiteURL<string>requiredEndereço de uma página da web com o Google ReCaptcha Enterprise.
websiteKey<string>requiredChave 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&...">
Neste exemplo, 6LdIFr0ZAAAAAO3vz0O0OQrtAefzdJcWQM2TMYQH é o valor do parâmetro websiteKey.
pageAction<string>optionalO 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>optionalObjeto com parâmetros adicionais do reCAPTCHA Enterprise.
Parâmetros do objeto:
s—string, parâmetro adicional do reCAPTCHA Enterprise que pode ser enviado paragrecaptcha.enterprise.renderjunto comsitekey.
Por exemplo:
grecaptcha.enterprise.render("some-div-id", {
sitekey: "6Lc_aCMTAAAAABx7u2N0D1XnVbI_v6ZdbM6rYf16",
theme: "dark",
s: "2JvUXHNTnZl1Jb6WEvbDyB...ugQA"
});
apiDomain<string>optionalEndereç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>optionalUse 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>optionalCookies 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>optionalhttp - 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>optionalEndereç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>optionalPorta do proxy.
proxyLogin<string>optionalLogin do servidor proxy.
proxyPassword<string>optionalSenha 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
- RecaptchaV2EnterpriseTask (sem proxy)
- RecaptchaV2EnterpriseTask (com proxy)
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
}
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"
},
"proxyType": "your-proxy-type",
"proxyAddress": "your-proxy-address",
"proxyPort": 1234,
"proxyLogin": "your-proxy-login",
"proxyPassword": "your-proxy-password",
"userAgent": "userAgentPlaceholder"
}
}
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.
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"
}
}
| Propriedade | Tipo | Descrição |
|---|---|---|
| gRecaptchaResponse | String | Hash 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
- Abra no navegador o site em que a CAPTCHA é exibida.
- 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:

Ou nas requisições de Network:

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.
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.
- JavaScript
- Python
- C#
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();
})();
Mostrar código
import asyncio
import re
from playwright.async_api import async_playwright
async def extract_recaptcha_v2_enterprise(url):
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
sitekey = None
enterprise_payload = {}
await page.goto(url, timeout=60000)
await page.wait_for_timeout(3000)
recaptcha_divs = await page.query_selector_all(".g-recaptcha")
for div in recaptcha_divs:
attrs = ["data-sitekey", "data-s", "data-cdata", "data-type", "data-context"]
for attr in attrs:
val = await div.get_attribute(attr)
if val:
key = attr.replace("data-", "")
if key == "sitekey":
sitekey = val
else:
enterprise_payload[key] = val
inline_scripts = await page.locator("script:not([src])").all_text_contents()
pattern = re.compile(r"grecaptcha\.enterprise\.render\([^,]+,\s*\{(.*?)\}", re.DOTALL)
for script in inline_scripts:
match = pattern.search(script)
if match:
obj = match.group(1)
for pair in re.finditer(r"(\w+)\s*:\s*['\"]([^'\"]+)['\"]", obj):
key = pair.group(1)
val = pair.group(2)
if key == "sitekey":
sitekey = val
else:
enterprise_payload[key] = val
break
await browser.close()
print(f"sitekey: {sitekey}")
print("enterprisePayload:")
for k, v in enterprise_payload.items():
print(f" {k}: {v}")
asyncio.run(extract_recaptcha_v2_enterprise("https://example.com"))
Mostrar código
using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Playwright;
using System.Collections.Generic;
class Program
{
public static async Task Main(string[] args)
{
await ExtractRecaptchaV2Enterprise("https://example.com");
}
public static async Task ExtractRecaptchaV2Enterprise(string url)
{
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
string sitekey = null;
var enterprisePayload = new Dictionary<string, string>();
await page.GotoAsync(url, new PageGotoOptions { Timeout = 60000 });
await page.WaitForTimeoutAsync(3000);
var recaptchaDivs = await page.QuerySelectorAllAsync(".g-recaptcha");
foreach (var div in recaptchaDivs)
{
var sitekeyAttr = await div.GetAttributeAsync("data-sitekey");
if (!string.IsNullOrEmpty(sitekeyAttr))
sitekey = sitekeyAttr;
var attributes = new[] { "data-s", "data-cdata", "data-type", "data-context" };
foreach (var attr in attributes)
{
var value = await div.GetAttributeAsync(attr);
if (!string.IsNullOrEmpty(value))
{
enterprisePayload[attr.Replace("data-", "")] = value;
}
}
}
var scripts = await page.Locator("script:not([src])").AllTextContentsAsync();
var pattern = new Regex(@"grecaptcha\.enterprise\.render\([^,]+,\s*\{(.*?)\}",
RegexOptions.Singleline);
foreach (var script in scripts)
{
var match = pattern.Match(script);
if (match.Success)
{
var obj = match.Groups[1].Value;
var keyMatches = Regex.Matches(obj, @"(\w+)\s*:\s*['""]([^'""]+)['""]");
foreach (Match m in keyMatches)
{
var key = m.Groups[1].Value.Trim();
var val = m.Groups[2].Value.Trim();
if (key == "sitekey")
sitekey = val;
else
enterprisePayload[key] = val;
}
break;
}
}
Console.WriteLine($"Sitekey: {sitekey}");
Console.WriteLine("Enterprise Payload:");
foreach (var kv in enterprisePayload)
{
Console.WriteLine($" {kv.Key}: {kv.Value}");
}
await browser.CloseAsync();
}
}
Usar biblioteca SDK
- JavaScript
- Python
- C#
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);
Mostrar código
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2EnterpriseRequest
# from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo # Descomente se planeja usar um proxy
API_KEY = "YOUR_API_KEY" # Insira sua chave de API do CapMonster Cloud
async def solve_recaptcha_v2_enterprise():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# Exemplo básico sem proxy
# O CapMonster Cloud usa automaticamente seus próprios proxies
recaptcha2request = RecaptchaV2EnterpriseRequest(
websiteUrl="https://mydomain.com/page-with-recaptcha-enterprise",
websiteKey="your-website-key",
enterprisePayload={
"s": "your-value"
}
)
# Exemplo de uso do seu próprio proxy
# Descomente este bloco se quiser usar um proxy personalizado
# proxy = ProxyInfo(
# proxyType="http",
# proxyAddress="123.45.67.89",
# proxyPort=8080,
# proxyLogin="username",
# proxyPassword="password"
# )
# recaptcha2request = RecaptchaV2EnterpriseRequest(
# websiteUrl="https://mydomain.com/page-with-recaptcha-enterprise",
# websiteKey="your-website-key",
# enterprisePayload={
# "s": "your-value"
# },
# proxy=proxy,
# userAgent="userAgentPlaceholder"
# )
# Se necessário, você pode verificar o saldo
balance = await cap_monster_client.get_balance()
print("Balance:", balance)
result = await cap_monster_client.solve_captcha(recaptcha2request)
print("Solution:", result)
asyncio.run(solve_recaptcha_v2_enterprise())
Mostrar código
// https://github.com/ZennoLab/capmonstercloud-client-dotnet
using System;
using System.Text.Json;
using System.Threading.Tasks;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
static async Task Main(string[] args)
{
// Sua chave de API do CapMonster Cloud
var clientOptions = new ClientOptions
{
ClientKey = "YOUR_API_KEY"
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
// Se necessário, você pode verificar o saldo
var balance = await cmCloudClient.GetBalanceAsync();
Console.WriteLine("Balance: " + balance);
// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
var 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 = JsonSerializer.Serialize(new
{
s = "your-value"
})
};
// Exemplo de uso do seu próprio proxy
// Descomente este bloco se quiser usar um proxy personalizado
/*
var recaptchaV2EnterpriseRequest = new RecaptchaV2EnterpriseRequest
{
WebsiteUrl = "https://mydomain.com/page-with-recaptcha-enterprise",
WebsiteKey = "your-website-key",
EnterprisePayload = JsonSerializer.Serialize(new
{
s = "your-value"
}),
Proxy = new ProxyContainer(
"123.45.67.89",
8080,
ProxyType.Http,
"username",
"password"
)
};
*/
var recaptchaV2EnterpriseResult =
await cmCloudClient.SolveAsync(recaptchaV2EnterpriseRequest);
Console.WriteLine(
"Solution: " + recaptchaV2EnterpriseResult.Solution.Value
);
}
}
