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 couvre ni l'automatisation de sites tiers, ni la neutralisation de protections anti-bot sans accord préalable.
Un flow Prefect qui rencontre un CAPTCHA n'a aucune raison de s'arrêter et d'attendre une intervention humaine. En appelant l'API CaptchaAI depuis une tâche Prefect, votre pipeline soumet le défi, récupère un token, l'injecte dans la session qui l'a déclenché, puis poursuit. L'enjeu de ce guide : rendre cet appel assez robuste pour tenir en production, pas seulement sur le chemin heureux d'une démo.
Prefect orchestre déjà vos planifications, vos retries et vos dépendances. La résolution de CAPTCHA s'y insère comme une tâche dédiée, idempotente et observable.
Pourquoi appeler CaptchaAI depuis un flow Prefect
Les équipes data arrivent ici quand un job planifié — collecte autorisée, contrôle qualité, synchronisation interne — tombe sur une étape protégée par un CAPTCHA. En notebook, l'appel paraît trivial ; une fois lancé sans surveillance, il casse à la première fenêtre de déploiement ou au premier changement de famille de CAPTCHA sur la page.
Vous voulez moins d'interventions manuelles, des délais prévisibles et un responsable clair en cas d'échec. CaptchaAI offre une API unique couvrant reCAPTCHA v2/v3, Cloudflare Turnstile et Challenge, GeeTest v3, les CAPTCHA image/OCR et en grille — avec la même boucle soumission/interrogation quelle que soit la famille.
Architecture de l'intégration CAPTCHA
Votre tâche Prefect appelle CaptchaAI en HTTPS pour obtenir un token, puis l'injecte dans votre formulaire ou votre route d'API. Isolez la résolution dans une tâche à part entière : elle reçoit les paramètres du défi (sitekey, URL, action éventuelle), renvoie un token et ignore le reste du flow. Vous pouvez ainsi rejouer la seule étape CAPTCHA sans relancer toute la planification.
Un appel CAPTCHA fiable, étape par étape
La logique est la même quel que soit le langage :
- Capturez les bons paramètres. Ne conservez que ce que la famille de CAPTCHA exige (sitekey, URL, action, proxy éventuel) ; stocker davantage crée de fausses pistes de débogage.
- Soumettez la tâche à l'endpoint d'envoi avec
json=1. Traitez tout statut différent de1comme une erreur et journalisez la réponse complète. - Interrogez le résultat : attendez 15 s, puis interrogez toutes les 5 s, avec un plafond de 120 s par tâche.
- Appliquez le token dans la même session que celle qui a déclenché le défi — même contexte de navigateur, même client HTTP, même cookie jar. Une session dépareillée est la première cause de rejet.
- Mesurez la latence, les retries et l'acceptation en aval : réussite de la résolution et réussite du workflow sont deux métriques distinctes.
Gérer les secrets CaptchaAI
La clé CaptchaAI vit dans un coffre (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault) ou un secret de CI, jamais dans le code source ; le déploiement la monte en variable d'environnement au runtime. Si vous hébergez vos workers chez OVHcloud ou Scaleway, gérez la rotation au niveau de la plateforme. Côté données, appliquez la minimisation du RGPD : aucune donnée personnelle inutile dans les traces d'appel CAPTCHA.
Exemple de code : tâche Turnstile
Exemple d'appel HTTP côté serveur, dans votre propre service :
import fetch from 'node-fetch';
const API_KEY = process.env.CAPTCHAAI_KEY;
export async function createTurnstileTask(siteKey, pageUrl) {
const res = await fetch('https://api.captchaai.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: 'TurnstileTaskProxyless',
websiteURL: pageUrl,
websiteKey: siteKey,
},
}),
});
const data = await res.json();
return data.taskId;
}
Cette fonction renvoie un identifiant de tâche ; votre boucle d'interrogation récupère ensuite le token à injecter dans la session concernée.
Observabilité et journalisation
Instrumentez les appels CAPTCHA pour obtenir des métriques exploitables : durée d'obtention du token, code retour HTTP, identifiant de tâche et taille de la file d'attente. Séparez les journaux par environnement (développement, préproduction, production) et corrélez les identifiants à votre traçage distribué, par exemple via OpenTelemetry — vous rejouez alors un scénario complet à partir d'un identifiant unique.
Tarification et coût à l'échelle
CaptchaAI facture au thread simultané, pas à la résolution : chaque offre inclut un nombre de threads et des résolutions illimitées par thread sur le mois. BASIC ($15/mois, 5 threads) suffit à valider une intégration ; vous montez vers STANDARD ($30/mois, 15 threads) ou au-delà selon votre débit, en dollars US. À l'échelle, le coût par résolution acceptée dépend de votre hygiène d'appel : paramètres erronés et retries en boucle gaspillent des threads, et la liste de contrôle ci-dessous corrige la plupart de ces dérives.
Liste de contrôle avant la mise en production
- Périmètre limité à vos propres applications ou à des sources autorisées.
- Clé CaptchaAI stockée dans un secret de CI ou un coffre, jamais dans le code.
- Durées d'appel et codes retour tracés à chaque exécution.
- Retry idempotent avec backoff exponentiel borné pour les erreurs transitoires.
- Token appliqué dans la session qui a déclenché le défi.
- Tests rejouables depuis votre intégration continue.
Dépannage
| Symptôme | Cause probable | Correctif |
|---|---|---|
ERROR_WRONG_USER_KEY |
Clé copiée avec un espace parasite ou mauvais compte. | Recopiez la clé et stockez-la en secret de CI. |
ERROR_ZERO_BALANCE |
Solde inférieur au minimum par tâche. | Rechargez le solde et ajoutez une alerte de seuil. |
ERROR_PAGEURL / ERROR_BAD_PARAMETERS |
Paramètre requis manquant ou mal formé. | Revérifiez l'URL, le sitekey et les champs du solveur face au HTML réel. |
CAPCHA_NOT_READY en boucle |
Résultat interrogé trop tôt. | Respectez le délai de 15 s, puis 5 s entre interrogations, plafond 120 s. |
| Token refusé après résolution | Token appliqué dans une autre session que le défi. | Gardez résolution et envoi dans le même contexte de navigateur ou la même session HTTP. |
FAQ
Comment insérer un appel CAPTCHA dans une tâche Prefect planifiée ?
Encapsulez la résolution dans une tâche Prefect dédiée qui reçoit les paramètres du défi et renvoie un token. Le reste du flow l'appelle comme n'importe quelle étape, avec les mêmes retries et la même journalisation — vous rejouez ainsi la seule étape CAPTCHA en cas d'échec.
Pourquoi mon token est-il refusé après une résolution réussie ?
Presque toujours parce qu'il est appliqué dans une session différente de celle du défi. Conservez le même contexte de navigateur, le même client HTTP et le même cookie jar entre la résolution et l'envoi, et vérifiez que le token n'a pas expiré.
Combien coûte l'exécution à grande échelle ?
Le coût suit le nombre de threads simultanés, pas le nombre de résolutions. BASIC ($15/mois, 5 threads) permet de démarrer, et vous augmentez les threads à mesure que le débit grandit. Retries en boucle et paramètres erronés sont les vrais postes de gaspillage.
Ce guide couvre-t-il l'automatisation de sites tiers ?
Non. Tous les exemples portent sur vos propres applications ou des environnements autorisés par écrit. Pour une source externe, validez d'abord les conditions d'utilisation et la base juridique.
Guides connexes
- Le démarrage rapide CaptchaAI
- La QA CAPTCHA en environnements autorisés
- Tester l'endpoint API sur vos formulaires
- Intégrer la résolution CAPTCHA en CI
- Résoudre reCAPTCHA v2 via l'API
D'un flow fragile à une intégration reproductible et mesurée : obtenez votre clé CaptchaAI.