
Aloísio Vítor
Image Processing Expert
Empecemos con el concepto más básico: qué es CAPTCHA, o "Completely Automated Public Turing test to tell Computers and Humans Apart" (Prueba de Turing pública completamente automatizada para distinguir entre computadoras y humanos), que es un método común para diferenciar entre usuarios humanos y bots. Ayuda a los sitios web a evitar ataques automatizados, spam o explotación al exigir a los usuarios que resuelvan tareas que son fáciles para los humanos pero difíciles para las máquinas. Esto podría ser reconocer texto distorsionado, seleccionar imágenes con objetos específicos o resolver rompecabezas lógicos.
reCAPTCHA es un servicio desarrollado por Google que ayuda a proteger los sitios web del spam y el abuso al distinguir entre usuarios humanos y bots. Ha evolucionado con el tiempo en diferentes versiones, cada una ofreciendo capacidades específicas.
reCAPTCHA v2: Esta es la forma más común en la que los usuarios resuelven tareas como hacer clic en casillas de verificación ("No soy un robot") o seleccionar imágenes. Es más fácil de usar, pero aún puede mostrar un desafío en función de los factores de riesgo.
reCAPTCHA v3: Esta versión se ejecuta de forma invisible en segundo plano sin interrumpir a los usuarios. Asigna puntuaciones de riesgo (0.0 a 1.0) en función del comportamiento del usuario. Los usuarios de bajo riesgo pasan sin ver un desafío, mientras que la actividad sospechosa puede activar pasos de verificación.
reCAPTCHA Enterprise: Diseñado para protección a nivel empresarial, esta versión ofrece características de seguridad mejoradas para grandes empresas. Proporciona análisis avanzados, modelos de aprendizaje automático y evaluación de riesgos adaptados a transacciones de alto riesgo, con mayor personalización para satisfacer las necesidades de seguridad empresarial.
Cada una de estas versiones tiene como objetivo proporcionar seguridad óptima al mismo tiempo que minimiza la fricción para los usuarios legítimos, adaptándose a la creciente sofisticación de los bots y los ataques.
- Demostración de reCAPTCHA v2
Ver la demostración de reCAPTCHA v2- Demostración de reCAPTCHA v3
Ver la demostración de reCAPTCHA v3- Demostración de reCAPTCHA Enterprise
Más información sobre reCAPTCHA Enterprise
Cada lenguaje ofrece fortalezas únicas cuando se trata de manejar desafíos reCAPTCHA:
Python es conocido por su simplicidad y un gran conjunto de bibliotecas que facilitan la automatización web y el raspado de datos. Usando bibliotecas como Selenium y Playwright, puedes automatizar fácilmente las tareas del navegador y eludir CAPTCHA con las herramientas adecuadas.
Java es ideal para aplicaciones a nivel empresarial y proyectos multiplataforma. Sus capacidades de multihilo y marcos como Selenium WebDriver permiten un manejo suave de reCAPTCHA en sistemas escalables.
C++ ofrece ventajas de rendimiento, lo que lo hace ideal para sistemas que requieren velocidad y baja latencia. Aunque menos comúnmente utilizado para la automatización, puede integrarse con otras herramientas para resolver desafíos reCAPTCHA en entornos de alto rendimiento.
A medida que avanzas, notarás que resolver desafíos reCAPTCHA puede ser complicado debido a la evolución de los algoritmos y las complejidades. Ahí es donde entra CapSolver. Es un servicio especializado que automatiza el proceso de resolución de reCAPTCHA con alta precisión, manejando múltiples tipos de CAPTCHA, incluyendo reCAPTCHA v2, reCAPTCHA v3 y más. Al integrar CapSolver en tu proyecto Python, Java o C++, puedes descargar la complejidad de resolver CAPTCHA a un servicio dedicado, permitiendo que tus scripts se ejecuten sin problemas y de manera eficiente.
A continuación, recorreremos el código de muestra para cada lenguaje y cómo puedes integrar rápidamente CapSolver en tu proyecto ...
Reclama tu Código adicional para las mejores soluciones de captcha; CapSolver: WEBS. Después de canjearlo, obtendrás un bono adicional del 5% después de cada recarga, ilimitado
Paso 1. Obtener la clave del sitio
Para V2 y V3, puedes buscar la solicitud /recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf en los registros de solicitud del navegador, donde k= es el valor de la clave que necesitamos.
Paso 2. Diferenciar entre V2 y V3
V2 y V3 tienen diferentes métodos de manejo. V2 requiere reconocimiento de imágenes para seleccionar respuestas, mientras que V3 es relativamente discreto; Sin embargo, V3 requiere proporcionar una acción durante la verificación. En función del valor de la clave obtenida previamente, busca en la página de respuesta y encontrarás el valor de la acción en la página.

Paso 3. Llamar al servicio CapSolver
/recaptcha/api2/reload, generalmente se necesita una solicitud /recaptcha/api2/userverify para obtener el token de paso;/recaptcha/api2/reload puede obtener el token de paso directamente# pip install requests
import requests
import time
# TODO: set your config
api_key = "YOUR_API_KEY" # your api key of capsolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # site key of your target site
site_url = "https://www.google.com/recaptcha/api2/demo" # page url of your target site
# 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("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(3) # delay
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("Solve failed! response:", res.text)
return
token = capsolver()
print(token)
# pip install requests
import requests
import time
# TODO: set your config
api_key = "YOUR_API_KEY" # your api key of capsolver
site_key = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf" # site key of your target site
site_url = "https://antcpt.com/score_detector/" # page url of your target site
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("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(1) # delay
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("Solve failed! response:", res.text)
return
# verify score
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 sumergirnos en el código, hay algunos requisitos previos que debes tener en cuenta para seguir este tutorial con éxito:
Una vez que hayas cumplido con estos requisitos previos, estarás listo para configurar tu entorno y comenzar a resolver desafíos reCAPTCHA con JavaScript y CapSolver.
/recaptcha/api2/reload?k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-, donde el valor después de k= es la clave del sitio que necesitamos. O puedes encontrar todos los parámetros para resolver recapctha a través de la extensión CapSolverpip install requests
import requests
import time
from DrissionPage import ChromiumPage
# Create an instance of ChromiumPage
page = ChromiumPage()
# Access the example page that triggers reCAPTCHA
page.get("https://www.google.com/recaptcha/api2/demo")
# TODO: Set your configuration
api_key = "your api key of capsolver" # Your CapSolver API key
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # Site key of your target site
site_url = "https://www.google.com/recaptcha/api2/demo" # Page URL of your target site
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
# Send a request to CapSolver to create a task
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("Failed to create task:", res.text)
return
print(f"Got taskId: {task_id} / Getting result...")
while True:
time.sleep(3) # Delay
payload = {"clientKey": api_key, "taskId": task_id}
# Query task results
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("Solve failed! response:", res.text)
return
def check():
# Get the reCAPTCHA solution
token = capsolver()
# Set the reCAPTCHA response value
page.run_js(f'document.getElementById("g-recaptcha-response").value="{token}"')
# Call the success callback function
page.run_js(f'onSuccess("{token}")')
# Submit the form
page.ele('x://input[@id="recaptcha-demo-submit"]').click()
if __name__ == '__main__':
check()
Antes de comenzar, asegúrate de tener las siguientes bibliotecas instaladas:
Puedes instalar estas usando vcpkg:
vcpkg install cpr jsoncpp
Crea un nuevo proyecto de C++ e incluye los encabezados necesarios para cpr y jsoncpp.
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
Definiremos dos funciones principales: createTask y getTaskResult.
Aquí está el 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 << "Error: " << responseBody["errorCode"].asString() << std::endl;
}
} else {
std::cerr << "Failed to parse response: " << 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 << "Task is still processing, waiting for 5 seconds..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
} else {
std::cerr << "Error: " << responseBody["errorCode"].asString() << std::endl;
break;
}
} else {
std::cerr << "Failed to parse response: " << 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 << "Task created successfully. Task ID: " << taskId << std::endl;
std::string recaptchaResponse = getTaskResult(apiKey, taskId);
std::cout << "reCAPTCHA Response: " << recaptchaResponse << std::endl;
} else {
std::cerr << "Failed to create task." << std::endl;
}
return 0;
}
Al concluir, puedo decir con confianza que integrar CapSolver en mis proyectos ha hecho que el manejo de desafíos reCAPTCHA sea mucho más fácil. Ya sea V2 o V3, el proceso es sencillo y me ha ahorrado mucho tiempo. Si estás lidiando con desafíos similares, te recomiendo probar CapSolver; ha sido un cambio de juego para mí.
¿Enfrentando errores como "reCAPTCHA Clave de sitio inválida" o "token de reCAPTCHA inválido"? Descubre las causas comunes, soluciones paso a paso y consejos de solución de problemas para resolver los errores de verificación de reCAPTCHA. Aprende cómo solucionar el error de verificación de reCAPTCHA, por favor intente de nuevo.

Aprende a resolver reCAPTCHA v2 usando Python y API. Este guía completa cubre métodos con y sin proxy con código listo para producción para automatización.
