Tipos de tarea
reCAPTCHA v2
Esta página se tradujo automáticamente de la versión en chino y puede contener errores. Prevalece la versión en chino.
Una tarea de reCAPTCHA v2 devuelve un token (gRecaptchaResponse) que envías al sitio de destino para pasar la verificación, sin necesidad de hacer clic en imágenes. El tipo más usado, NoCaptchaTaskProxyless, cuesta 15 puntos (≈ $2.25 / 1k) por tarea y es asíncrono: crea la tarea con createTask y luego llama a getTaskResult cada 5 segundos para obtener el resultado. Las tareas fallidas o que superan el tiempo de espera reciben un reembolso de puntos automático.
https://api.yescaptcha.com/createTaskEndpoint globalhttps://cn.yescaptcha.com/createTaskEndpoint ChinaEl cuerpo de la solicitud es JSON y se autentica con tu clientKey (cópiala desde el Panel de yescaptcha.com). Consulta el resultado en el mismo endpoint en el que creaste la tarea.
Cuándo usarlo
Sección titulada «Cuándo usarlo»- La página muestra la casilla “No soy un robot” (I’m not a robot): versión con casilla.
- No hay casilla y el desafío con imágenes aparece solo después de pulsar el botón de envío: versión invisible. Añade
"isInvisible": true. - La página carga
recaptcha/enterprise.js, o las URL de las solicitudes contienenenterprise: versión Enterprise. Usa un tipo conEnterpriseen el nombre.
Si no estás seguro de cuál es, consulta Identificar el tipo de captcha. Si los tokens no pasan con la frecuencia suficiente, prueba el reconocimiento de imágenes de reCAPTCHA v2: la API te indica qué imágenes pulsar y tú haces clic en ellas en el navegador.
Tipos y precios
Sección titulada «Tipos y precios»| Tipo de tarea | Precio | Modo | Notas |
|---|---|---|---|
NoCaptchaTaskProxyless | $2.25 / 1k; 15 puntos/tarea · ¥15 / 1k | Asíncrono | |
RecaptchaV2TaskProxyless | $3.00 / 1k; 20 puntos/tarea · ¥20 / 1k | Asíncrono | Mismos parámetros que NoCaptchaTaskProxyless en una ruta distinta; puedes usar cualquiera de los dos como respaldo |
NoCaptchaTask | $2.25 / 1k; 15 puntos/tarea · ¥15 / 1k | Asíncrono | Proxy propio |
RecaptchaV2EnterpriseTaskProxyless | $3.00 / 1k; 20 puntos/tarea · ¥20 / 1k | Asíncrono | |
RecaptchaV2EnterpriseTask | $3.00 / 1k; 20 puntos/tarea · ¥20 / 1k | Asíncrono | Proxy propio |
Los precios en dólares son estimaciones con US$1 ≈ ¥6.67; las tareas se cobran en puntos.
NoCaptchaTaskProxylessyRecaptchaV2TaskProxylesstienen los mismos parámetros y distinta ruta. Si uno no pasa con la frecuencia suficiente, prueba el otro.- Los tipos sin
Proxylessen el nombre (NoCaptchaTask,RecaptchaV2EnterpriseTask) cargan el captcha a través de tu propio proxy y requierenproxyType,proxyAddress,proxyPorty otros campos. Úsalos cuando el sitio de destino compruebe la IP del visitante.
Parámetros de la solicitud
Sección titulada «Parámetros de la solicitud»Campos del objeto task en createTask:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
type | string | Sí | Tipo de tarea; consulta "Tipos de tarea y precios" en esta página |
websiteURL | string | Sí | URL completa de la página que muestra el captcha. Usa el sitio donde ves el captcha, no el dominio del proveedor del captcha |
websiteKey | string | Sí | La clave del sitio (sitekey), que se encuentra en el código fuente de la página o en las solicitudes de red; normalmente no cambia |
isInvisible | boolean | No | Envía true para la variante invisible; en otro caso, omítelo |
proxyType | string | Algunos tipos | Protocolo del proxy: http, https, socks4 o socks5 (Obligatorio para NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyAddress | string | Algunos tipos | Dirección IP o nombre de host del proxy. Las direcciones locales o privadas como 127.0.0.1 o 192.168.x.x no funcionan porque nuestros servidores no pueden acceder a ellas (Obligatorio para NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyPort | integer | Algunos tipos | Puerto del proxy (Obligatorio para NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyLogin | string | No | Usuario del proxy, si el proxy requiere autenticación (solo NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyPassword | string | No | Contraseña del proxy, si el proxy requiere autenticación (solo NoCaptchaTask, RecaptchaV2EnterpriseTask) |
userAgent | string | No | User-Agent del navegador. Si el resultado contiene un userAgent, usa ese valor al enviar el token (solo NoCaptchaTask, RecaptchaV2EnterpriseTask) |
enterprisePayload | object | No | Parámetros adicionales de la versión Enterprise, como el valor s de reCAPTCHA Enterprise: {"s": "..."}. Omítelo si la página no lo usa (solo RecaptchaV2EnterpriseTaskProxyless, RecaptchaV2EnterpriseTask) |
Para encontrar websiteURL y websiteKey, consulta Encontrar los parámetros de reCAPTCHA.
Ejemplo de solicitud
Sección titulada «Ejemplo de solicitud»Con la página de demostración oficial de Google:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}Código completo que crea la tarea, consulta cada 5 segundos e imprime el token. Antes de ejecutarlo, guarda tu ClientKey en la variable de entorno YESCAPTCHA_CLIENT_KEY:
curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}'
# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'import osimport time
import requests
API = "https://api.yescaptcha.com"CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable
def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data
def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id)
solution = solve({ "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",})print(solution["gRecaptchaResponse"])const API = 'https://api.yescaptcha.com';const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable
async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data;}
async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`);}
const solution = await solve({ type: "NoCaptchaTaskProxyless", websiteURL: "https://www.google.com/recaptcha/api2/demo", websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",});console.log(solution.gRecaptchaResponse);Para la versión Enterprise, si la página pasa un valor s a reCAPTCHA, colócalo en enterprisePayload:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "RecaptchaV2EnterpriseTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "enterprisePayload": { "s": "S_VALUE_FROM_THE_PAGE" } }}Con tu propio proxy:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTask", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "proxyType": "http", "proxyAddress": "proxy.example.com", "proxyPort": 8080, "proxyLogin": "user", "proxyPassword": "pass" }}Resultado
Sección titulada «Resultado»createTask devuelve un ID de tarea:
{ "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"}Úsalo para llamar a getTaskResult. Mientras la tarea sigue en proceso, recibes {"errorId": 0, "status": "processing"}; consulta de nuevo 5 segundos después. Cuando termina, devuelve:
{ "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." }}| Campo | Tipo | Descripción |
|---|---|---|
gRecaptchaResponse | string | El token que debes enviar al sitio de destino. De un solo uso, válido durante unos 120 segundos; úsalo en un plazo de 60 segundos |
Una tarea se procesa durante un máximo de unos 110 segundos; pasado ese tiempo devuelve ERROR_TASK_TIMEOUT y se reembolsan los puntos. Cuando hay un error, errorId es 1; gestiónalo según errorCode, como se describe en Códigos de error. Para saber cómo enviar el token, consulta Completar reCAPTCHA con un token.
Preguntas frecuentes
Sección titulada «Preguntas frecuentes»¿Por qué los tokens de un mismo sitio a veces pasan y a veces no?
Sección titulada «¿Por qué los tokens de un mismo sitio a veces pasan y a veces no?»Lo decide el sitio de destino. Puntúa cada verificación y aplica un umbral que puede cambiar en cualquier momento, por lo que la tasa de éxito varía según el sitio y no todos los tokens pasan. Puedes comparar con otro tipo de tarea del mismo captcha o cambiar al reconocimiento de imágenes.
¿Cuánto tiempo es válido un token?
Sección titulada «¿Cuánto tiempo es válido un token?»Es de un solo uso y es válido durante unos 120 segundos. Envíalo en los 60 segundos posteriores a recibirlo. Google establece este límite.
¿Se cobran puntos si falla el reconocimiento?
Sección titulada «¿Se cobran puntos si falla el reconocimiento?»No. Las tareas que devuelven ERROR_CAPTCHA_UNSOLVABLE o superan el tiempo de espera reciben un reembolso de puntos automático. Consulta Facturación y reembolsos.