Scarnox · Blog

Comment fonctionne reCAPTCHA v2 et comment le résoudre (bientôt disponible)

reCAPTCHA v2 est le captcha classique de Google. Il affiche une case à cocher intitulée « Je ne suis pas un robot » et, lorsqu'il doute du visiteur, ajoute un défi d'images. Un solveur pour ce captcha doit produire un jeton de réponse valide que le site peut faire vérifier par Google. La prise en charge de reCAPTCHA v2 par Scarnox arrive bientôt. Ce guide explique le fonctionnement du widget, les approches générales utilisées aujourd'hui, et ce qu'il faut attendre d'un solveur à base de jetons.

Scarnox ne résout pas encore reCAPTCHA v2 en direct. Le seul type de tâche disponible aujourd'hui est PopularCaptcha, sans proxy. Si votre projet a besoin de reCAPTCHA v2 maintenant, les approches ci-dessous sont les options réalistes.

Fonctionnement du widget

La page intègre un élément conteneur avec un attribut data-sitekey. Cette sitekey identifie le site auprès de Google. Lorsque le widget se charge, il exécute des vérifications dans le navigateur, en examinant le comportement du visiteur, ses cookies et son historique, puis envoie une évaluation de risque à Google.

Si l'évaluation est à faible risque, la case se coche d'elle-même et le widget écrit un jeton dans un champ caché nommé g-recaptcha-response. Si l'évaluation est à risque plus élevé, le visiteur voit un défi d'images, par exemple sélectionner des cases contenant un objet particulier. Réussir le défi écrit aussi le jeton.

Le backend du site envoie ensuite ce jeton au point de vérification de Google, avec la clé secrète du site. Google répond par un succès ou un échec. Comme la vérification se fait côté serveur, un formulaire qui accepte un jeton sans le faire vérifier par Google n'est pas réellement protégé par reCAPTCHA.

Pourquoi il est signalé

La case à cocher est une décision de risque, pas une énigme. Les déclencheurs habituels sont :

Comprendre ces déclencheurs compte davantage que le widget lui-même. Si votre trafic ne déclenche pas la case à cocher, vous ne verrez jamais le défi d'images.

Approches générales qui fonctionnent aujourd'hui

Ces approches sont largement utilisées, et elles sont honnêtes. Elles réduisent la fréquence à laquelle un défi apparaît dans un travail légitime.

  1. Conserver de vraies sessions. Réutilisez les cookies et un profil de navigateur cohérent pendant une session, plutôt que de repartir de zéro à chaque page.
  2. Régler le rythme de vos requêtes. Un rythme régulier et lent ressemble bien plus à une personne qu'une rafale.
  3. Utiliser un vrai navigateur pour le widget. Un navigateur complet avec des réglages normaux est moins susceptible d'être signalé qu'une configuration headless dépouillée. Le guide de détection des navigateurs headless liste les signaux courants.
  4. Demander une exception ou une clé de test. Si vous êtes propriétaire du site, utilisez les clés de test publiées par Google en préproduction. Sinon, demandez au propriétaire une liste d'autorisation.
  5. Garder un humain dans la boucle. Pour les tâches à faible volume, une personne peut cocher la case et transmettre le jeton. C'est lent mais fiable.

Ces approches ne garantissent pas qu'un défi n'apparaîtra jamais. Elles en réduisent la fréquence, ce qui permet de garder un travail légitime stable.

Ce que fera un solveur à base de jetons

Un solveur à base de jetons pour reCAPTCHA v2 fait ce que fait PopularCaptcha aujourd'hui. Il prend la sitekey et l'URL de la page, produit un jeton g-recaptcha-response valide, et le renvoie à votre code. Votre code écrit ensuite le jeton dans le formulaire et l'envoie avant qu'il n'expire.

Scarnox documentera le type de tâche et les champs supplémentaires éventuels dans la référence API lorsque la prise en charge de reCAPTCHA v2 sera disponible. D'ici là, ne construisez pas sur une interface supposée. La forme de la requête sera proche de l'exemple PopularCaptcha, mais vérifiez la documentation pour les valeurs exactes.

Liste de vérification pour une tâche reCAPTCHA v2

Lorsque vous planifiez une tâche qui touche à un formulaire reCAPTCHA v2, vérifiez ces points :

Erreurs fréquentes

Le problème le plus courant avec une intégration reCAPTCHA v2 est un jeton que le site rejette alors qu'il semble correct. Trois causes expliquent la plupart des cas. La première est une incohérence entre la sitekey et l'URL de la page : le jeton est lié à la page où le widget a été affiché, donc une sitekey prise sur une page puis soumise sur une autre échouera. La deuxième est un jeton périmé. Les jetons ont une durée de vie courte, donc un script qui résout en premier puis exécute une longue série d'autres étapes enverra une valeur expirée. La troisième est l'absence de vérification côté serveur de votre part. Si vos tests confirment seulement qu'un jeton existe, vous ne remarquerez pas que l'étape de vérification échoue.

Un second groupe d'erreurs vient du workflow autour du widget. Se connecter dans une session puis envoyer le formulaire depuis une autre est une erreur courante, car la vérification peut dépendre de la session qui a chargé le widget. Réessayer en boucle un formulaire rejeté rend aussi la session suspecte, ce qui peut transformer un seul défi en une série. Lorsqu'un échec survient, faites une pause, vérifiez l'état de la page, et ne retentez qu'une fois avec des valeurs fraîches.

Scraper de manière responsable

Si le formulaire fait partie d'une tâche de scraping, vérifiez le robots.txt et les conditions d'utilisation du site avant de commencer. Gardez un rythme bas, et ne collectez pas de données personnelles dont vous n'avez pas besoin. Le guide sur la légalité du web scraping couvre les principales considérations.

Prochaines étapes