Comparisons

Résolution de CAPTCHA basée sur des jetons ou sur des cookies

Un token est une autorisation à usage unique : injecté dans un formulaire, il expire en une à deux minutes. Un cookie est un laissez-passer de session : une résolution ouvre l'accès pendant 30 minutes à 24 heures.

Le site cible impose l'un ou l'autre. Ce que vous choisissez, c'est le pipeline bâti autour de cette contrainte : il décide de votre débit et de votre facture.


Quelle approche pour quel scénario

Commencez par lire la page : un champ masqué dans un <form> annonce un token, une page d'attente Cloudflare un cookie.

Scénario Approche Pourquoi
Connexion protégée par reCAPTCHA Token Il part avec les données du formulaire
Collecte sur un site derrière Cloudflare Cookie Une résolution, des centaines de pages
Formulaire protégé par Turnstile Token Injecté dans cf-turnstile-response
Appels d'API derrière Cloudflare Cookie Le même cookie sert tous les appels
Envois de formulaires en série Token à chaque envoi Jamais deux fois le même
Scraping massif sur un domaine Cookie Résolvez une fois, collectez jusqu'à expiration

Un même domaine peut relever des deux à la fois.


Le token : une autorisation à usage unique

Le token est vérifié par Google ou Cloudflare au moment de l'envoi ; rien n'en subsiste ensuite.

Le parcours, étape par étape

  1. Récupérez le sitekey dans le code source
  2. Envoyez le sitekey et l'URL à CaptchaAI
  3. Récupérez le token par polling
  4. Injectez-le dans le champ masqué
  5. Envoyez le formulaire

Quels défis renvoient un token

Type de défi Champ à renseigner À savoir
reCAPTCHA v2 g-recaptcha-response Zone de texte masquée
reCAPTCHA v3 g-recaptcha-response Ajoutez action (enterprise=1 si sitekey Enterprise)
Turnstile cf-turnstile-response Moins de 10 s
hCaptcha h-captcha-response Type non pris en charge par CaptchaAI

Implémentation en Python

import requests
import time

API_KEY = "YOUR_API_KEY"

# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMR...",
    "pageurl": "https://example.com/login",
    "json": "1",
}).json()
task_id = resp["request"]

# 2. Poll
token = None
for _ in range(24):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": "1"
    }).json()
    if result["status"] == 1:
        token = result["request"]
        break

# 3. Submit form with token (no browser needed)
form_response = requests.post("https://example.com/login", data={
    "email": "user@example.com",
    "password": "password",
    "g-recaptcha-response": token,
})

Ce qu'il faut anticiper

  • Aucun navigateur pour l'envoi : une simple requête POST suffit.
  • Fenêtre courte : 60 à 120 secondes. Résolvez au moment d'envoyer, pas au démarrage.
  • Un token, un envoi : chaque soumission exige une résolution neuve.

Le cookie est posé par le site après un défi résolu dans un navigateur ; il vit ensuite dans votre client HTTP.

Comment il est délivré

  1. Le serveur sert une page de challenge (Cloudflare Challenge, JS Challenge)
  2. Un navigateur résout ce défi, qui peut mobiliser Turnstile en interne
  3. Le serveur pose un cookie de session, typiquement cf_clearance
  4. Les requêtes portant ce cookie passent sans nouveau défi
Source du cookie Cookie posé
Cloudflare Challenge cf_clearance, moins de 15 s
JS Challenge cf_clearance, sans interaction
Défis WAF divers Nom variable selon l'éditeur
from selenium import webdriver
import requests
import time

# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")

# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10)  # Or use CaptchaAI token injection

# 2. Extract cookies from browser
cookies = driver.get_cookies()
cf_clearance = next(
    (c for c in cookies if c["name"] == "cf_clearance"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()

# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})

for cookie in cookies:
    session.cookies.set(cookie["name"], cookie["value"])

# All requests now pass the challenge
for page in range(1, 50):
    resp = session.get(f"https://example.com/api/data?page={page}")
    print(f"Page {page}: {resp.status_code}")

Ce qu'il faut anticiper

  • Un navigateur complet pour l'obtenir ; ensuite, requests suffit.
  • Durée de vie longue : 30 minutes à 24 heures selon le site.
  • Lié à l'IP et au User-Agent du navigateur : votre session requests doit reprendre les deux.

Cas concret : surveillance tarifaire depuis l'Europe

Une équipe data belge suit les prix publics de six sites concurrents, dont deux derrière Cloudflare Challenge. Ses workers tournent sur OVHcloud et sur AWS eu-west-3 (Paris).

Un conteneur avec navigateur obtient un cf_clearance par domaine et le stocke dans Redis (TTL de 25 minutes) ; quinze workers en requests le réutilisent pour environ 3 000 pages. Un autre des six sites, protégé par Turnstile, exige un token neuf à chaque envoi. Deux règles en découlent : chaque worker sort par l'IP qui a obtenu le cookie, et la minimisation RGPD s'applique dès qu'une page contient des données personnelles.


Combiner les deux sur un même site

Beaucoup de sites empilent les deux couches : une page Cloudflare Challenge (cookie) protège un formulaire à reCAPTCHA (token). L'ordre compte — le cookie d'abord, sinon pas de sitekey.

# Step 1: Get past Cloudflare (cookie)
session = get_cf_clearance_session("https://example.com")

# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)

# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")

# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
    "data": "value",
    "g-recaptcha-response": token,
})

Si extract_sitekey ne trouve rien, la page lue est encore celle du challenge.


Coût, vitesse et contraintes

Les repères ci-dessous sont les plafonds publiés. Les résultats varient selon l'environnement, le volume et le moment de la journée.

Critère Token Cookie
Sortie Chaîne de plus de 500 caractères Cookie (cf_clearance, etc.)
Réutilisable Non, usage unique Oui, toute la session
Unité de coût Une résolution par envoi Une résolution par session
Temps de résolution Turnstile < 10 s, reCAPTCHA v2 < 60 s Cloudflare Challenge < 15 s
Expiration 60–120 s 30 min à 24 h

Côté budget, c'est le nombre de threads qui compte : BASIC ($15/mois, 5 threads) pour des formulaires ponctuels, ADVANCE ($90/mois, 50 threads) pour une collecte parallélisée.


Dépannage

Problème Cause probable Correctif
Formulaire refusé, token pourtant valide Deux minutes entre résolution et envoi Résolvez juste avant le POST
cf_clearance en 403 après quelques appels IP ou User-Agent différents Épinglez le proxy, recopiez le User-Agent
Débit qui s'effondre en collecte Un navigateur par processus Mutualisez le cookie en cache

FAQ

Combien de temps un token reste-t-il valide ?

Entre 60 et 120 secondes selon le type de défi. Au-delà d'une minute d'attente, relancez une résolution plutôt qu'un retry.

Parce qu'il est lié à l'IP et au User-Agent qui l'ont obtenu. Épinglez chaque session à un proxy fixe et recopiez le User-Agent du navigateur.

CaptchaAI prend-il en charge hCaptcha pour la partie token ?

Non, ni hCaptcha ni FunCaptcha (Arkose Labs) ; GeeTest v4 est annoncé à venir. Sont pris en charge : reCAPTCHA v2 et v3, Turnstile, Cloudflare Challenge, GeeTest v3, les CAPTCHA image/OCR et les grilles d'images, plus, en bêta, CaptchaFox, Friendly Captcha et Lemin.

Faut-il mettre les cookies obtenus dans un cache partagé ?

Oui, dès que plusieurs workers visent le même domaine : un TTL inférieur à sa durée de vie évite de relancer un navigateur par processus. Ne mettez jamais un token en cache : il expire avant d'être réutilisé.


Résolvez vos CAPTCHA avec CaptchaAI

Récupérez votre clé API sur captchaai.com et envoyez votre première requête.


Guides associés

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