Ir al contenido
EstadoPanel

Guías

Identificar el tipo de captcha

Esta página se tradujo automáticamente de la versión en chino y puede contener errores. Prevalece la versión en chino.

El primer paso para elegir el tipo de tarea correcto es reconocer el captcha. Lo más fiable es abrir las herramientas de desarrollo del navegador (F12) y ver en el panel Network qué script de captcha carga la página; también puedes identificarlo por su aspecto.

Así se ve cada captcha en una página web (animaciones ilustrativas, no capturas de pantalla); haz clic en una tarjeta para abrir la página de su tipo de tarea. Si el aspecto no es concluyente, confírmalo con la tabla de referencia rápida y el panel Network que aparecen a continuación.

Lo que ves Qué es Tipo de tarea
Una casilla “No soy un robot” (“I’m not a robot”) reCAPTCHA v2 reCAPTCHA v2
Sin casilla; el desafío de imágenes aparece al hacer clic en enviar; hay una pequeña insignia de reCAPTCHA en la esquina inferior derecha reCAPTCHA v2 invisible (o v3) Consulta “Versiones de reCAPTCHA” más abajo
Sin ninguna interacción; solo la insignia de reCAPTCHA en la esquina inferior derecha reCAPTCHA v3 reCAPTCHA v3
Una casilla “Soy humano” y desafíos de imágenes con la marca hCaptcha hCaptcha hCaptcha
Un cuadro de verificación de Cloudflare dentro de un formulario; la página no cambia tras marcarlo Cloudflare Turnstile Turnstile
Toda la página muestra “Un momento…” / “Comprobando su conexión” y luego redirige automáticamente Página de verificación de Cloudflare Página de verificación de Cloudflare
Puzzles de Arkose Labs (como “Elige la imagen que está correctamente orientada hacia arriba”) FunCaptcha Reconocimiento de imágenes de FunCaptcha
Una imagen con letras y números distorsionados Captcha de caracteres Imagen a texto

Busca api.js o enterprise.js en el panel Network:

Script cargado Versión
recaptcha/api.js, sin el parámetro render o con render=explicit v2 estándar
Igual que arriba, y la URL de la petición anchor contiene size=invisible v2 invisible: añade "isInvisible": true a la tarea
recaptcha/api.js?render=CLAVE_DEL_SITIO (render no es explicit) v3 estándar
recaptcha/enterprise.js, sin el parámetro render o con render=explicit v2 Enterprise
recaptcha/enterprise.js?render=CLAVE_DEL_SITIO v3 Enterprise

Ejemplos:

https://www.google.com/recaptcha/api.js?onload=onloadcallback&render=explicit → v2
https://www.google.com/recaptcha/api.js?render=6LdyC2cUAAAAACGuDKpXeDorzUDWXmdqeg-xy696 → v3
https://www.google.com/recaptcha/enterprise.js?render=explicit → v2 Enterprise

La v2 invisible a veces solo pasa con un tipo de v3; prueba ambos.

También puedes ejecutar el siguiente código en la consola (Console) del navegador. Lista todos los reCAPTCHA de la página con su versión, la clave del sitio, la URL de la página y la función callback:

find-recaptcha-clients.js
// Paste into the browser DevTools console on a page with reCAPTCHA, then run findRecaptchaClients().
// Lists every reCAPTCHA on the page: version (V2/V3), sitekey, page URL and the callback function.
function findRecaptchaClients() {
if (typeof ___grecaptcha_cfg === 'undefined') return [];
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([, value]) => value && typeof value === 'object');
objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(
([, value]) => value && typeof value === 'object' && 'sitekey' in value && 'size' in value,
);
if (toplevel instanceof HTMLElement && toplevel.tagName === 'DIV') data.pageurl = toplevel.baseURI;
if (found) {
const [sublevelKey, sublevel] = found;
data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
findRecaptchaClients();

Ejemplo de resultado:

[
{
"id": "0",
"version": "V2",
"sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
"function": "onSuccess",
"callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
"pageurl": "https://www.google.com/recaptcha/api2/demo"
}
]

Las páginas de demostración oficiales de Google sirven para comparar: v2 estándar https://www.google.com/recaptcha/api2/demo, v2 invisible https://www.google.com/recaptcha/api2/demo?invisible=true.

Turnstile y la página de verificación de Cloudflare

Sección titulada «Turnstile y la página de verificación de Cloudflare»

Ambos son de Cloudflare, pero no son lo mismo:

  • Turnstile es un cuadro de verificación incrustado en el formulario de la página. Al completarse se marca con una palomita y la página no cambia. La página carga challenges.cloudflare.com/turnstile/v0/api.js. Usa Turnstile.
  • La página de verificación de Cloudflare reemplaza toda la página por la pantalla de comprobación de Cloudflare, que muestra “Un momento…” o “xx.com necesita comprobar la seguridad de su conexión antes de continuar”; puede contener también un cuadro de verificación. Al superarla, redirige automáticamente a la página real. El código fuente contiene __cf_chl_rt_tk o cdn-cgi/challenge-platform. Usa Página de verificación de Cloudflare.

Si tu programa recibe un 403 con “Just a moment…” pero el navegador abre la página sin problema, lo más probable es que solo se esté bloqueando la huella TLS. Una biblioteca que imite la huella TLS de un navegador (por ejemplo, curl_cffi) permite hacer la petición sin necesidad de resolver la verificación.