
Adélia Cruz
Neural Network Developer

Quando comecei a trabalhar com reCAPTCHA, descobri que era uma faca de dois gumes. Por um lado, é ótimo para filtrar bots, mas por outro, pode ser um obstáculo para projetos de automação legítimos. Então, neste artigo, vou guiá-lo na resolução do reCAPTCHA usando três linguagens de programação poderosas: Python, Java e C++. Cada linguagem oferece suas próprias vantagens para lidar com desafios do reCAPTCHA, oferecendo flexibilidade de acordo com as necessidades do seu projeto. Começaremos entendendo o que são CAPTCHA e reCAPTCHA, juntamente com sua importância na segurança da web.
Vamos começar com o conceito mais básico: o que é CAPTCHA, ou "Teste Público de Turing Completamente Automatizado para Distinguir Computadores e Humanos", que é um método comum para diferenciar usuários humanos de bots. Ele ajuda os sites a evitar ataques automatizados, spam ou exploração, exigindo que os usuários resolvam tarefas que são fáceis para humanos, mas difíceis para máquinas. Isso pode ser reconhecer texto distorcido, selecionar imagens com objetos específicos ou resolver quebra-cabeças lógicos.
reCAPTCHA é um serviço desenvolvido pelo Google que ajuda a proteger os sites de spam e abuso, distinguindo usuários humanos de bots. Ele evoluiu ao longo do tempo para diferentes versões, cada uma oferecendo capacidades específicas.
reCAPTCHA v2: Esta é a forma mais comum onde os usuários resolvem tarefas como clicar em caixas de seleção ("Não sou um robô") ou selecionar imagens. É mais amigável, mas ainda pode exibir um desafio com base em fatores de risco.
reCAPTCHA v3: Esta versão é executada invisivelmente em segundo plano, sem interromper os usuários. Ele atribui pontuações de risco (0,0 a 1,0) com base no comportamento do usuário. Os usuários de baixo risco passam sem ver um desafio, enquanto a atividade suspeita pode acionar etapas de verificação.
reCAPTCHA Enterprise: Projetado para proteção de nível empresarial, esta versão oferece recursos de segurança aprimorados para grandes empresas. Ele fornece análise avançada, modelos de aprendizado de máquina e avaliação de risco baseada em risco adaptada a transações de alto risco, com maior personalização para atender às necessidades de segurança do negócio.
Cada uma dessas versões visa fornecer segurança ideal, ao mesmo tempo em que minimiza o atrito para usuários legítimos, adaptando-se à crescente sofisticação de bots e ataques.
- reCAPTCHA v2 Demo
Visualizar demonstração do reCAPTCHA v2- reCAPTCHA v3 Demo
Visualizar demonstração do reCAPTCHA v3- reCAPTCHA Enterprise Demo
Saiba mais sobre o reCAPTCHA Enterprise
Cada linguagem oferece pontos fortes exclusivos quando se trata de lidar com desafios do reCAPTCHA:
Python é conhecido por sua simplicidade e grande conjunto de bibliotecas que facilitam a automação da web e a coleta de dados. Usando bibliotecas como Selenium e Playwright, você pode facilmente automatizar tarefas do navegador e contornar o CAPTCHA com as ferramentas adequadas.
Java é ótimo para aplicativos de nível empresarial e projetos multiplataforma. Seus recursos de multithreading e frameworks como Selenium WebDriver permitem um tratamento suave do reCAPTCHA em sistemas escaláveis.
C++ oferece vantagens de desempenho, tornando-o ideal para sistemas que exigem velocidade e baixa latência. Embora seja menos usado para automação, ele pode ser integrado a outras ferramentas para resolver desafios do reCAPTCHA em ambientes de alto desempenho.
À medida que você avança, perceberá que resolver desafios do reCAPTCHA pode se tornar complicado devido à evolução dos algoritmos e complexidades. É aí que o CapSolver entra em ação. É um serviço especializado que automatiza o processo de resolução do reCAPTCHA com alta precisão, lidando com vários tipos de CAPTCHA, incluindo reCAPTCHA v2, reCAPTCHA v3 e muito mais. Integrando o CapSolver em seu projeto Python, Java ou C++, você pode transferir a complexidade de resolver CAPTCHA para um serviço dedicado, permitindo que seus scripts sejam executados sem problemas e com eficiência.
Em seguida, veremos o código de amostra para cada linguagem e como você pode integrar rapidamente o CapSolver em seu projeto...
Reivindique seu Código bônus para as melhores soluções de captcha; CapSolver: WEBS. Após resgatá-lo, você receberá um bônus extra de 5% após cada recarga, ilimitado
Etapa 1. Obtenha a chave do site
Para V2 e V3, você pode procurar a solicitação /recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf nos logs de solicitação do navegador, onde k= é o valor da chave de que precisamos
Etapa 2. Diferenciar entre V2 e V3
V2 e V3 têm métodos de tratamento diferentes. V2 requer reconhecimento de imagem para selecionar respostas, enquanto V3 é relativamente discreto; No entanto, V3 exige fornecer uma Ação durante a verificação. Com base no valor da chave obtido anteriormente, procure na página de resposta e você encontrará o valor da Ação na página

Etapa 3. Chame o serviço CapSolver
/recaptcha/api2/reload, geralmente é necessária uma solicitação /recaptcha/api2/userverify para obter o token de passagem;/recaptcha/api2/reload pode obter o token de passagem diretamente# pip install requests
import requests
import time
# TODO: definir sua configuração
api_key = "YOUR_API_KEY" # sua chave de API do capsolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # chave do site do seu site de destino
site_url = "https://www.google.com/recaptcha/api2/demo" # URL da página do seu site de destino
# site_key = "6LelzS8UAAAAAGSL60ADV5rcEtK0x0lRsHmrtm62"
# site_url = "https://mybaragar.com/index.cfm?event=page.SchoolLocatorPublic&DistrictCode=BC45"
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Falha ao criar tarefa:", res.text)
return
print(f"Obteve taskId: {task_id} / Obtendo resultado...")
while True:
time.sleep(3) # atraso
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('gRecaptchaResponse')
if status == "failed" or resp.get("errorId"):
print("Solução falhou! resposta:", res.text)
return
token = capsolver()
print(token)
# pip install requests
import requests
import time
# TODO: definir sua configuração
api_key = "YOUR_API_KEY" # sua chave de API do capsolver
site_key = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf" # chave do site do seu site de destino
site_url = "https://antcpt.com/score_detector/" # URL da página do seu site de destino
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV3TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url,
"pageAction": "homepage",
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Falha ao criar tarefa:", res.text)
return
print(f"Obteve taskId: {task_id} / Obtendo resultado...")
while True:
time.sleep(1) # atraso
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('gRecaptchaResponse')
if status == "failed" or resp.get("errorId"):
print("Solução falhou! resposta:", res.text)
return
# verificar pontuação
def score_detector(token):
headers = {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "fr-CH,fr;q=0.9",
"content-type": "application/json",
"origin": "https://antcpt.com",
"priority": "u=1, i",
"referer": "https://antcpt.com/score_detector/",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"macOS\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
"x-requested-with": "XMLHttpRequest"
}
url = "https://antcpt.com/score_detector/verify.php"
data = {
"g-recaptcha-response": token
}
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, data=data)
print(response.json())
print(response)
token = capsolver()
print(token)
...
...
{
'success': True,
'challenge_ts': '2024-07-19T10:50:56Z',
'hostname': 'antcpt.com',
'score': 0.7,
'action': 'homepage'
}
Antes de mergulharmos no código, há alguns pré-requisitos que você deve ter em vigor para acompanhar este tutorial com sucesso:
Depois de atender a esses pré-requisitos, você está pronto para configurar seu ambiente e começar a resolver desafios do reCAPTCHA com JavaScript e CapSolver.
/recaptcha/api2/reload?k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-, onde o valor após k= é a Chave do Site de que precisamos. Ou você pode encontrar todos os parâmetros para resolver o recapctha por meio da extensão CapSolverpip install requests
import requests
import time
from DrissionPage import ChromiumPage
# Crie uma instância de ChromiumPage
page = ChromiumPage()
# Acesse a página de exemplo que aciona o reCAPTCHA
page.get("https://www.google.com/recaptcha/api2/demo")
# TODO: Definir sua configuração
api_key = "sua chave de API do capsolver" # Sua chave da API do CapSolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # Chave do site do seu site de destino
site_url = "https://www.google.com/recaptcha/api2/demo" # URL da página do seu site de destino
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
# Envie uma solicitação ao CapSolver para criar uma tarefa
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Falha ao criar tarefa:", res.text)
return
print(f"Obteve taskId: {task_id} / Obtendo resultado...")
while True:
time.sleep(3) # Atraso
payload = {"clientKey": api_key, "taskId": task_id}
# Consultar resultados da tarefa
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('gRecaptchaResponse')
if status == "failed" or resp.get("errorId"):
print("Solução falhou! resposta:", res.text)
return
def check():
# Obtenha a solução do reCAPTCHA
token = capsolver()
# Definir o valor da resposta do reCAPTCHA
page.run_js(f'document.getElementById("g-recaptcha-response").value="{token}"')
# Chamar a função de retorno de chamada de sucesso
page.run_js(f'onSuccess("{token}")')
# Enviar o formulário
page.ele('x://input[@id="recaptcha-demo-submit"]').click()
if __name__ == '__main__':
check()
Antes de começarmos, certifique-se de que você tenha as seguintes bibliotecas instaladas:
Você pode instalar essas bibliotecas usando vcpkg:
vcpkg install cpr jsoncpp
Crie um novo projeto C++ e inclua os cabeçalhos necessários para cpr e jsoncpp.
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
Definiremos duas funções principais: createTask e getTaskResult.
Aqui está o código completo:
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
std::string createTask(const std::string& apiKey, const std::string& websiteURL, const std::string& websiteKey) {
Json::Value requestBody;
requestBody["clientKey"] = apiKey;
requestBody["task"]["type"] = "ReCaptchaV2Task";
requestBody["task"]["websiteURL"] = websiteURL;
requestBody["task"]["websiteKey"] = websiteKey;
Json::StreamWriterBuilder writer;
std::string requestBodyStr = Json::writeString(writer, requestBody);
cpr::Response response = cpr::Post(
cpr::Url{"https://api.capsolver.com/createTask"},
cpr::Body{requestBodyStr},
cpr::Header{{"Content-Type", "application/json"}}
);
Json::CharReaderBuilder reader;
Json::Value responseBody;
std::string errs;
std::istringstream s(response.text);
std::string taskId;
if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
if (responseBody["errorId"].asInt() == 0) {
taskId = responseBody["taskId"].asString();
} else {
std::cerr << "Erro: " << responseBody["errorCode"].asString() << std::endl;
}
} else {
std::cerr << "Falha ao analisar resposta: " << errs << std::endl;
}
return taskId;
}
std::string getTaskResult(const std::string& apiKey, const std::string& taskId) {
Json::Value requestBody;
requestBody["clientKey"] = apiKey;
requestBody["taskId"] = taskId;
Json::StreamWriterBuilder writer;
std::string requestBodyStr = Json::writeString(writer, requestBody);
while (true) {
cpr::Response response = cpr::Post(
cpr::Url{"https://api.capsolver.com/getTaskResult"},
cpr::Body{requestBodyStr},
cpr::Header{{"Content-Type", "application/json"}}
);
Json::CharReaderBuilder reader;
Json::Value responseBody;
std::string errs;
std::istringstream s(response.text);
if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
if (responseBody["status"].asString() == "ready") {
return responseBody["solution"]["gRecaptchaResponse"].asString();
} else if (responseBody["status"].asString() == "processing") {
std::cout << "Tarefa ainda está sendo processada, aguardando 5 segundos..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
} else {
std::cerr << "Erro: " << responseBody["errorCode"].asString() << std::endl;
break;
}
} else {
std::cerr << "Falha ao analisar resposta: " << errs << std::endl;
break;
}
}
return "";
}
int main() {
std::string apiKey = "YOUR_API_KEY";
std::string websiteURL = "https://example.com";
std::string websiteKey = "SITE_KEY";
std::string taskId = createTask(apiKey, websiteURL, websiteKey);
if (!taskId.empty()) {
std::cout << "Tarefa criada com sucesso. ID da Tarefa: " << taskId << std::endl;
std::string recaptchaResponse = getTaskResult(apiKey, taskId);
std::cout << "Resposta do reCAPTCHA: " << recaptchaResponse << std::endl;
} else {
std::cerr << "Falha ao criar tarefa." << std::endl;
}
return 0;
}
Ao finalizar, posso dizer com segurança que integrar o CapSolver aos meus projetos tornou muito mais fácil lidar com desafios do reCAPTCHA. Seja V2 ou V3, o processo é direto e me economizou muito tempo. Se você está lidando com desafios semelhantes, recomendo fortemente experimentar o CapSolver - ele foi um divisor de águas para mim.
Enfrentando "Chave de Site Inválida do reCAPTCHA" ou "token do reCAPTCHA inválido"? Descubra causas comuns, soluções passo a passo e dicas de solução de problemas para resolver problemas de verificação do reCAPTCHA. Aprenda como corrigir o erro de verificação do reCAPTCHA, por favor tente novamente.

Aprenda como corrigir problemas comuns do reCAPTCHA na raspagem da web. Descubra soluções práticas para o reCAPTCHA v2 e v3 para manter fluxos de coleta de dados sem interrupções.
