Aller au contenu
ÉtatTableau de bord

Guides

Identifier le type de captcha

Cette page a été traduite automatiquement à partir de la version chinoise et peut contenir des erreurs. La version chinoise fait foi.

Pour choisir le bon type de tâche, il faut d’abord reconnaître le captcha. Le moyen le plus fiable est d’ouvrir les outils de développement du navigateur (F12) et de regarder, dans l’onglet Network (Réseau), quel script de captcha la page charge ; vous pouvez aussi vous fier à l’apparence.

Voici l’aspect de chaque captcha sur une page web (animations illustratives, pas des captures d’écran) ; cliquez sur une carte pour ouvrir la page du type correspondant. Si l’apparence ne suffit pas, confirmez avec l’aide-mémoire ci-dessous et l’onglet Network.

Ce que vous voyez De quoi il s’agit Type de tâche à utiliser
Une case « Je ne suis pas un robot » reCAPTCHA v2 reCAPTCHA v2
Pas de case à cocher ; une épreuve d’images apparaît après le clic sur « Envoyer » ; un petit badge reCAPTCHA en bas à droite reCAPTCHA v2 invisible (ou v3) Voir « Versions de reCAPTCHA » ci-dessous
Aucune interaction ; seulement le badge reCAPTCHA en bas à droite reCAPTCHA v3 reCAPTCHA v3
Une case « Je suis humain » ; épreuves d’images marquées hCaptcha hCaptcha hCaptcha
Un widget Cloudflare dans un formulaire ; la page ne change pas après la validation Cloudflare Turnstile Turnstile
Toute la page affiche « Veuillez patienter… » / « Vérification de votre connexion », puis redirige automatiquement Page de vérification Cloudflare Page de vérification Cloudflare
Puzzles ou épreuves d’images d’Arkose Labs (par exemple « Choisissez l’image dans le bon sens ») FunCaptcha Reconnaissance d’images FunCaptcha
Une image de lettres et de chiffres déformés Captcha de caractères Reconnaissance de texte dans une image

Dans l’onglet Network, cherchez api.js ou enterprise.js :

Script chargé Version
recaptcha/api.js, sans paramètre render ou avec render=explicit v2 standard
Idem, et l’adresse de la requête anchor contient size=invisible v2 invisible : ajoutez "isInvisible": true à la tâche
recaptcha/api.js?render=CLÉ_DU_SITE (render différent de explicit) v3 standard
recaptcha/enterprise.js, sans paramètre render ou avec render=explicit v2 Enterprise
recaptcha/enterprise.js?render=CLÉ_DU_SITE v3 Enterprise

Exemples :

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 ne passe parfois qu’avec un type v3 ; essayez les deux.

Vous pouvez aussi exécuter le code ci-dessous dans la console (Console) du navigateur. Il liste tous les reCAPTCHA de la page avec leur version, leur clé de site, l’adresse de la page et leur fonction de rappel :

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();

Exemple de résultat :

[
{
"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"
}
]

Les pages de démonstration de Google permettent de comparer : v2 standard https://www.google.com/recaptcha/api2/demo, v2 invisible https://www.google.com/recaptcha/api2/demo?invisible=true.

Les deux viennent de Cloudflare, mais ce ne sont pas la même chose :

  • Turnstile est un widget intégré au formulaire d’une page. Une fois la vérification terminée, une coche s’affiche et la page ne change pas. La page charge challenges.cloudflare.com/turnstile/v0/api.js. Utilisez Turnstile.
  • La page de vérification Cloudflare remplace toute la page par l’écran de contrôle de Cloudflare (« Veuillez patienter… », « xx.com doit d’abord vérifier la sécurité de votre connexion »), qui peut aussi contenir un widget ; une fois la vérification réussie, elle redirige vers la vraie page. Le code source contient __cf_chl_rt_tk ou cdn-cgi/challenge-platform. Utilisez Page de vérification Cloudflare.

Si votre programme reçoit un 403 avec « Just a moment… » alors qu’un navigateur ouvre la page directement, vous êtes probablement bloqué uniquement par l’empreinte TLS. Une bibliothèque qui imite l’empreinte TLS d’un navigateur (par exemple curl_cffi) suffit généralement à passer, sans rien résoudre.