Resolviendo reCAPTCHA usando Python, Java y C++
Aloísio Vítor
Image Processing Expert
25-Oct-2024
¡Qué es CAPTCHA?
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.
¡Qué es reCAPTCHA?
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
Resolver reCAPTCHA en Python, Java y C++
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.
Presentando CapSolver
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 ...
Código adicional
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
Cómo resolver reCAPTCHA usando Python
Requisitos previos
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
Distinguir las versiones reCAPTCHA
- En los registros de solicitud del navegador, puedes ver que para V2, después de la solicitud
/recaptcha/api2/reload
, generalmente se necesita una solicitud/recaptcha/api2/userverify
para obtener el token de paso; - Para V3, la solicitud
/recaptcha/api2/reload
puede obtener el token de paso directamente
Ejemplo completo de llamada a la API de CapSolver
- Python reCAPTCHA V2
python
# 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)
- Python reCAPTCHA V3
python
# 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'
}
Cómo resolver reCAPTCHA usando Java
Requisitos previos
Antes de sumergirnos en el código, hay algunos requisitos previos que debes tener en cuenta para seguir este tutorial con éxito:
- Node.js y npm: Usaremos Node.js, un entorno de ejecución de JavaScript, junto con npm (Node Package Manager) para administrar las dependencias de nuestro proyecto. Si no tienes Node.js instalado, puedes descargarlo desde el sitio web oficial de Node.js.
- Clave de la API de CapSolver: Para resolver desafíos reCAPTCHA de manera efectiva, necesitarás acceso a un servicio como CapSolver, que se especializa en resolver desafíos CAPTCHA programáticamente. Asegúrate de registrarte y obtener una clave de API de CapSolver para integrarla en tu solución.
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.
Paso 1: Obtener la clave del sitio
- En los registros de solicitud del navegador, busca la solicitud
/recaptcha/api2/reload?k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
, donde el valor después dek=
es la clave del sitio que necesitamos. O puedes encontrar todos los parámetros para resolver recapctha a través de la extensión CapSolver - La URL es la dirección de la página que activa reCAPTCHA V2.
Paso 2: Instalar la biblioteca de solicitudes
bash
pip install requests
Paso 3: Código de ejemplo
python
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()
Cómo resolver reCAPTCHA usando C++
Requisitos previos
Antes de comenzar, asegúrate de tener las siguientes bibliotecas instaladas:
- cpr: Una biblioteca HTTP de C++.
- jsoncpp: Una biblioteca de C++ para el análisis JSON.
Puedes instalar estas usando vcpkg:
bash
vcpkg install cpr jsoncpp
Paso 1: Configurar tu proyecto
Crea un nuevo proyecto de C++ e incluye los encabezados necesarios para cpr
y jsoncpp
.
cpp
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
Paso 2: Definir funciones para crear y obtener resultados de tareas
Definiremos dos funciones principales: createTask
y getTaskResult
.
- createTask: Esta función crea una tarea reCAPTCHA.
- getTaskResult: Esta función recupera el resultado de la tarea creada.
Aquí está el código completo:
cpp
#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;
}
Reflexiones finales
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í.
Aviso de Cumplimiento: La información proporcionada en este blog es solo para fines informativos. CapSolver se compromete a cumplir con todas las leyes y regulaciones aplicables. El uso de la red de CapSolver para actividades ilegales, fraudulentas o abusivas está estrictamente prohibido y será investigado. Nuestras soluciones para la resolución de captcha mejoran la experiencia del usuario mientras garantizan un 100% de cumplimiento al ayudar a resolver las dificultades de captcha durante el rastreo de datos públicos. Fomentamos el uso responsable de nuestros servicios. Para obtener más información, visite nuestros Términos de Servicio y Política de Privacidad.
Máse
Resolviendo reCAPTCHA con Reconocimiento de IA en 2025
Explorar cómo la IA está transformando la resolución de reCAPTCHA, las soluciones de CapSolver y el panorama cambiante de la seguridad CAPTCHA en 2025.
Adélia Cruz
11-Nov-2024
Resolviendo reCAPTCHA usando Python, Java y C++
¿Quieres saber cómo resolver reCAPTCHA con éxito usando tres lenguajes de programación poderosos: Python, Java y C++ en un solo blog? ¡Entra!
Aloísio Vítor
25-Oct-2024
Cómo resolver reCAPTCHA v2 con Rust
Aprende a resolver reCaptcha v2 usando Rust y la API de Capsolver. Esta guía abarca los métodos con y sin proxy, proporcionando instrucciones paso a paso y ejemplos de código para integrar la resolución de reCaptcha v2 en tus aplicaciones Rust.
Aloísio Vítor
17-Oct-2024
Guía para resolver reCAPTCHA v3 con puntuaciones altas en Python
Esta guía te guiará a través de estrategias efectivas y técnicas de Python para resolver reCAPTCHA v3 con puntajes altos, asegurando que tus tareas de automatización se ejecuten sin problemas.
Aloísio Vítor
17-Sep-2024
Cómo manejar múltiples desafíos de reCAPTCHA de forma concurrente
Aprende a manejar varios desafíos de reCAPTCHA simultáneamente en proyectos de web scraping. Este blog explica los diferentes tipos de reCAPTCHA, cómo identificarlos usando herramientas como Capsolver y automatizar la resolución de CAPTCHA usando Python y threading.
Aloísio Vítor
10-Sep-2024
Cómo integrar soluciones reCAPTCHA v2 en Python para la extracción de datos
Aprende a integrar soluciones reCAPTCHA v2 en Python para una extracción de datos fluida. Explora las versiones de reCAPTCHA, comprende la extracción de datos y sigue un ejemplo sencillo utilizando Capsolver para automatizar la resolución de desafíos reCAPTCHA v2.
Adélia Cruz
10-Sep-2024