Explainers

Comment fonctionnent les CAPTCHA à empreinte canvas

Périmètre sûr : ce guide s'applique uniquement à vos propres applications, à vos environnements de QA, de préproduction ou de production, ou à des systèmes pour lesquels vous disposez d'une autorisation écrite. Il ne décrit ni l'automatisation de sites tiers, ni le contournement de protections.

Un CAPTCHA à empreinte canvas ne vous demande pas de cliquer sur des images : il mesure la façon dont votre navigateur dessine. L'anti-bot fait rendre un texte dans un élément <canvas> masqué, lit les pixels obtenus, puis en dérive une signature qui varie selon le GPU, le pilote, l'OS et les polices installées. Pour une équipe d'automatisation, tout l'enjeu est de garder ce flux stable en production.

Qu'est-ce que l'empreinte canvas ?

Le script lit le canvas rendu, le condense en un hachage et obtient un identifiant stable pour l'appareil, sans poser de cookie. Un environnement automatisé neuf renvoie une empreinte trop uniforme pour paraître humaine.

Pourquoi les anti-bot s'en servent

L'empreinte est rarement utilisée seule : elle rejoint un faisceau de signaux qu'un service comme reCAPTCHA v3 ou Cloudflare Turnstile agrège en un score :

  • mouvements de souris et cadence de frappe ;
  • cohérence WebGL et rendu graphique ;
  • en-têtes réseau et attributs navigateur.

Un navigateur headless part avec un signal faible : un flux « marche en local » déclenche un défi en production. CaptchaAI couvre les familles concernées : reCAPTCHA v2 et v3, Cloudflare Turnstile et Challenge, GeeTest v3, et les CAPTCHA image/OCR et en grille.

Les trois acteurs du défi

  • Le front affiche le widget et déclenche le défi.
  • Le fournisseur CAPTCHA produit le token après résolution.
  • Le backend vérifie le token côté serveur avant d'accorder l'accès.

Côté application, vous contrôlez trois leviers : configuration du widget, vérification du token, réponse selon le score.

Intégrer la résolution avec l'API CaptchaAI

Le déroulé est identique quelle que soit la famille :

  1. Capturez les paramètres — sitekey, URL, action, proxy éventuel ; le surplus crée de fausses pistes.
  2. Soumettez la tâche à in.php avec json=1 ; traitez tout statut différent de 1 comme une erreur.
  3. Interrogez le résultat sur res.php : patientez 15 s, puis toutes les 5 s, plafond 120 s par tâche.
  4. Appliquez le token dans la même session que celle qui a déclenché le défi — un décalage est la première cause d'un token refusé.
  5. Mesurez la latence, les retrys et l'acceptation en aval.

Avant un lot, vérifiez le solde pour éviter un échec sur solde nul :

import os
import requests

API_KEY = os.environ['CAPTCHAAI_KEY']

def get_balance() -> float:
    resp = requests.post(
        'https://api.captchaai.com/getBalance',
        json={'clientKey': API_KEY},
        timeout=15,
    )
    resp.raise_for_status()
    return float(resp.json().get('balance', 0))

Le plan d'entrée est BASIC ($15/mois, 5 threads), facturé par thread concurrent, avec des résolutions illimitées.

Observabilité et RGPD

Instrumentez chaque appel : durée d'obtention du token, code HTTP, identifiant de tâche, taille de file. Si vous consignez des données personnelles, minimisez-les et vérifiez vos obligations RGPD. Suivez enfin l'acceptation de bout en bout séparément de la simple réussite du solveur : une tâche résolue n'est pas encore un workflow réussi.

Dépannage

Symptôme Cause probable Correctif
ERROR_WRONG_USER_KEY Clé mal copiée ou mauvais compte. Recopiez-la en secret CI.
ERROR_ZERO_BALANCE Solde sous le minimum par tâche. Rechargez et alertez sur le solde.
ERROR_BAD_PARAMETERS Paramètre requis absent ou mal formé. Revalidez l'URL et le sitekey.
Token refusé après résolution Token appliqué dans une autre session. Gardez résolution et envoi dans le même contexte.

FAQ

CaptchaAI prend-il en charge hCaptcha pour ce type de défi ?

Non — pas encore pris en charge. hCaptcha et FunCaptcha (Arkose Labs) ne sont pas pris en charge, et GeeTest v4 est annoncé comme à venir. CaptchaAI résout en revanche reCAPTCHA v2 et v3, Turnstile, Challenge et GeeTest v3.

Pourquoi mon token est-il refusé alors que la résolution a réussi ?

Presque toujours à cause d'une session incohérente : le token est appliqué dans un contexte différent de celui qui a déclenché le défi. Gardez la même session — navigateur, client HTTP, cookie jar — entre résolution et envoi.

Puis-je transposer cette méthode à ma pile technique ?

Oui. La séquence est la même quel que soit le langage : capturez, soumettez, interrogez le résultat, appliquez le token dans la même session, puis mesurez. Les exemples sont en Python et Node.js.

Guides connexes

Passez de la théorie à une intégration qui tient en production : démarrez sur une tranche réelle de votre charge et laissez les métriques décider. – Obtenez votre clé CaptchaAI.

Les commentaires sont désactivés pour cet article.