Integrations

Résoudre les CAPTCHAs à grande échelle avec Ray et les tâches distribuées

Périmètre sûr : ce guide s'applique exclusivement à vos propres applications, à vos environnements de test 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, ni l'évasion d'anti-bot.

Dans un pipeline distribué, la façon la plus fiable de résoudre des CAPTCHAs est de traiter chaque défi comme une tâche Ray idempotente : une entrée claire, un token en sortie, aucun état partagé. Ce guide montre comment câbler CaptchaAI dans des tâches Ray distribuées pour une résolution stable en production comme en QA.

Pourquoi distribuer la résolution avec Ray

Un script qui résout un CAPTCHA en cinq minutes dans un notebook donne une fausse impression de simplicité. En exécution continue et non supervisée, trois problèmes reviennent :

  • La latence de résolution varie selon le type de défi et le moment de la journée.
  • Le réseau échoue : DNS, certificats, coupures transitoires.
  • La famille de CAPTCHA affichée sur la page change parfois sans prévenir.

Ray répartit les appels sur plusieurs workers et vous laisse dimensionner la concurrence explicitement, sans réécrire votre logique de résolution.

Architecture : une tâche Ray par défi

Chaque worker reçoit uniquement les paramètres utiles au solveur, puis renvoie un token — aucun état n'est partagé entre deux exécutions. Le déroulé tient en trois étapes :

  1. Capturez les paramètres exacts attendus par la famille de CAPTCHA : sitekey, URL de la page, action, proxy optionnel. Rien de plus, pour éviter les fausses pistes de débogage.
  2. Appelez CaptchaAI via HTTPS depuis la tâche Ray et récupérez le token.
  3. Injectez 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êmes cookies. Une session dépareillée est la première cause de rejet.

CaptchaAI expose la même API pour reCAPTCHA v2 et v3, Cloudflare Turnstile et Challenge, GeeTest v3, ainsi que les CAPTCHAs image/OCR et en grille. La facturation est par thread, résolutions illimitées : BASIC ($15/mois, 5 threads) autorise cinq résolutions concurrentes, et vous montez de palier au-delà. Le nombre de tâches en vol ne doit jamais excéder votre allocation de threads.

Gérer les secrets et la clé API

La clé CaptchaAI ne vit jamais dans le code source. Stockez-la dans un coffre ou un secret d'intégration continue, montez-la en variable d'environnement au démarrage, et laissez chaque worker la lire depuis là.

Emplacement Quand l'utiliser
HashiCorp Vault Pools multi-cloud avec rotation automatique des secrets.
AWS Secrets Manager Workers déployés sur AWS (Lambda, ECS, EC2).
Azure Key Vault Intégration native avec Azure Functions et AKS.
Secret CI Pipelines GitHub Actions ou GitLab CI qui déclenchent le pool.

Sur un pool OVHcloud ou Scaleway, injectez le secret au démarrage du conteneur plutôt que de le figer dans l'image.

Exemple : soumettre une tâche Turnstile

Appel HTTP côté serveur, exécuté par un worker 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;
}

Enveloppez cette fonction dans une tâche Ray (@ray.remote) et distribuez les appels. Le même contrat se transpose vers Python, Go ou Java.

Observabilité et journalisation distribuée

Instrumentez chaque appel CAPTCHA pour distinguer une résolution réussie d'un workflow réussi. Suivez au minimum :

  • La durée d'obtention du token, mesurée côté worker.
  • Le code retour HTTP et l'identifiant de tâche.
  • Un identifiant corrélé à votre traçage distribué (OpenTelemetry).

Séparez les journaux par environnement et minimisez les données personnelles qu'ils contiennent : c'est la bonne pratique RGPD pour des workers qui traitent du trafic réel.

Retry et idempotence

Les erreurs transitoires sont normales. Prévoyez un backoff exponentiel borné : trois tentatives, doublement du délai, plafond à 30 secondes. Une tâche Ray idempotente se rejoue sans effet de bord, ce qui rend le retry sûr. Ne réutilisez jamais un token expiré : une nouvelle tentative repart des paramètres d'entrée, pas d'un résultat mis en cache.

Dépannage

Ces erreurs couvrent l'essentiel des tickets sur ce type d'intégration. Chaque ligne se corrige sans quitter votre éditeur.

Symptôme Cause probable Correctif
ERROR_WRONG_USER_KEY Clé copiée avec un espace parasite ou mauvais compte. Recopiez la clé depuis le tableau de bord et stockez-la comme secret CI.
ERROR_ZERO_BALANCE Solde du compte sous le minimum par tâche. Rechargez le solde et ajoutez une alerte de seuil dans le tableau de bord.
ERROR_PAGEURL / ERROR_BAD_PARAMETERS Paramètre requis manquant ou mal formé. Revalidez l'URL de la page et le sitekey face au HTML réel.
ERROR_CAPTCHA_UNSOLVABLE Le défi n'a pas pu être résolu de façon fiable. Réessayez une fois ; si le problème persiste, capturez le HTML et ouvrez un ticket.
Token refusé après résolution Token injecté dans une session différente de celle du défi. Gardez la résolution et l'envoi du formulaire dans la même session.

Liste de contrôle avant la mise en production

  • Le périmètre reste limité à vos propres applications ou à des sources autorisées.
  • La clé CaptchaAI est stockée dans un coffre ou un secret CI, jamais dans le code source.
  • Les tâches Ray en vol ne dépassent pas votre allocation de threads.
  • Les durées d'appel et les codes retour sont tracés pour chaque exécution.
  • Un backoff exponentiel borné couvre les erreurs transitoires.

FAQ

Combien de threads CaptchaAI faut-il pour un pool distribué ?

Alignez le nombre de tâches simultanées sur les threads de votre plan. BASIC ($15/mois, 5 threads) couvre cinq résolutions en parallèle ; au-delà, passez à un palier supérieur. Une résolution terminée libère aussitôt son thread, sans facturation à la résolution.

CaptchaAI prend-il en charge hCaptcha dans ce type de pipeline ?

Non — hCaptcha n'est pas encore pris en charge, tout comme FunCaptcha (Arkose Labs). L'architecture Ray décrite ici fonctionne avec les familles prises en charge : reCAPTCHA v2 et v3, Turnstile, Challenge, GeeTest v3 et les CAPTCHAs image/OCR.

Comment garder une tâche de résolution idempotente ?

Ne conservez aucun état entre deux exécutions : la tâche part de ses seuls paramètres d'entrée et produit un token. Tracez l'identifiant de tâche, mais ne réutilisez jamais un token expiré. Rejouer une tâche après un échec réseau reste sans risque.

Guides connexes

Fiabilisez vos workflows CAPTCHA distribués avec une approche méthodique et reproductible. — Obtenez votre clé CaptchaAI.

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