Une migration d'Anti-Captcha vers CaptchaAI se décide sur trois points concrets : les pages Cloudflare Challenge, les BLS CAPTCHA et le format d'API que vos wrappers attendent. Si votre pipeline touche l'un des trois, le changement se compte en heures, pas en semaines.
Anti-Captcha reste un service historique à large couverture. Voici ce qui change côté code, couverture et facturation.
Format d'API : JSON propriétaire chez Anti-Captcha, compatible 2Captcha chez CaptchaAI
Anti-Captcha expose une API de tâches JSON propriétaire : vous créez une tâche typée, puis un endpoint distinct renvoie la solution.
# Anti-Captcha — custom JSON format
import requests
resp = requests.post("https://api.anti-captcha.com/createTask", json={
"clientKey": "ANTICAPTCHA_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com",
"websiteKey": "SITE_KEY",
}
})
task_id = resp.json()["taskId"]
# Poll with different endpoint and format
result = requests.post("https://api.anti-captcha.com/getTaskResult", json={
"clientKey": "ANTICAPTCHA_KEY",
"taskId": task_id,
})
CaptchaAI reprend le format 2Captcha : un POST vers in.php, puis un GET vers res.php jusqu'à ce que le token soit prêt.
# CaptchaAI — standard 2Captcha-compatible format
import requests
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": "https://example.com",
"json": 1,
})
task_id = resp.json()["request"]
# Standard polling
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": task_id,
"json": 1,
})
La différence n'est pas cosmétique : des centaines de bibliothèques implémentent déjà le format 2Captcha. Si vos scripts passent par l'une d'elles, la migration se limite souvent à l'URL de base et à la clé API.
Ce qu'Anti-Captcha ne couvre pas côté Cloudflare
Anti-Captcha résout les tokens Turnstile managed, mais sa prise en charge du Turnstile invisible reste partielle et il ne traite ni les pages Cloudflare Challenge ni les défis JS. CaptchaAI couvre les quatre cas.
C'est le motif de bascule le plus fréquent : beaucoup de cibles affichent désormais une page Challenge interstitielle et non un widget. Le token est valide, la page ne se débloque pas, et vos logs enchaînent les 403.
BLS CAPTCHA : le cas des portails de rendez-vous
Les portails BLS servent aux demandes de visa dans une bonne partie du Maghreb et de l'Afrique de l'Ouest francophone. Pour qui automatise sa propre démarche ou un environnement de test autorisé, le besoin est réel — Anti-Captcha, lui, n'expose aucune méthode BLS.
# CaptchaAI — BLS with a high success rate
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "bls",
"pageurl": "https://bls-portal.example.com",
"sitekey": "BLS_SITE_KEY",
"json": 1,
})
CaptchaAI traite ce type via method=bls, en moins d'une seconde et avec un taux de réussite élevé — sur votre dossier et votre environnement uniquement.
Scores reCAPTCHA v3 et couverture GeeTest
Un token v3 accepté ne vaut rien si le score est trop bas. Selon les données publiées, la résolution par opérateurs humains d'Anti-Captcha donne des scores irréguliers, de l'ordre de 0,3 à 0,5 ; CaptchaAI traite la v3 de façon automatisée en moins de 4 s, avec un seuil paramétrable côté requête.
GeeTest v3 est pris en charge des deux côtés. GeeTest v4 ne l'est pas chez CaptchaAI : il est annoncé « à venir » — si votre cible est en v4, ne migrez pas cette partie du pipeline.
Comparatif fonctionnel Anti-Captcha / CaptchaAI
| Fonctionnalité | Anti-Captcha | CaptchaAI |
|---|---|---|
| reCAPTCHA v2, v2 invisible, Enterprise | ✅ | ✅ |
| reCAPTCHA v3 | ✅ (scores faibles) | ✅ seuil paramétrable |
| Cloudflare Challenge et défi JS | ❌ | ✅ |
| GeeTest v4 | pris en charge | ❌ à venir |
| hCaptcha, FunCaptcha (Arkose Labs) | pris en charge | ❌ pas encore pris en charge |
| BLS | ❌ | ✅ |
| CaptchaFox, Friendly Captcha, Lemin | non documenté | ✅ (bêta) |
| Image / OCR | ✅ | ✅ 27 500+ variantes |
Deux lignes se lisent à l'envers : si votre trafic repose sur hCaptcha, FunCaptcha ou GeeTest v4, CaptchaAI ne le remplace pas.
Temps de résolution : ce que vous pouvez attendre
Les chiffres ci-dessous reposent sur des mesures observées et des retours d'utilisateurs. Les résultats varient selon l'environnement, le volume et le moment de la journée.
| Type de CAPTCHA | Anti-Captcha | CaptchaAI |
|---|---|---|
| reCAPTCHA v2 | 15–45 s | <60 s |
| reCAPTCHA v3 | 10–30 s | <4 s |
| CAPTCHA image | 5–15 s | <0.5 s |
| Cloudflare Turnstile | 10–30 s | <10 s |
| Cloudflare Challenge | non pris en charge | <15 s |
| GeeTest v3 | 15–40 s | <12 s |
Les valeurs CaptchaAI sont des plafonds, pas des moyennes.
Migrer sans interrompre la production
Faites cohabiter les deux fournisseurs derrière une même interface, puis basculez un paramètre.
import requests
import time
class CaptchaSolver:
"""Unified solver — supports Anti-Captcha and CaptchaAI."""
def __init__(self, provider="captchaai", api_key="YOUR_API_KEY"):
self.provider = provider
self.api_key = api_key
def solve_recaptcha_v2(self, sitekey, pageurl):
if self.provider == "captchaai":
return self._solve_captchaai("userrecaptcha", sitekey, pageurl)
else:
return self._solve_anticaptcha(sitekey, pageurl)
def _solve_captchaai(self, method, sitekey, pageurl):
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": self.api_key,
"method": method,
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": self.api_key, "action": "get",
"id": task_id, "json": 1,
})
data = result.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Solve timeout")
def _solve_anticaptcha(self, sitekey, pageurl):
resp = requests.post("https://api.anti-captcha.com/createTask", json={
"clientKey": self.api_key,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": pageurl,
"websiteKey": sitekey,
},
})
task_id = resp.json()["taskId"]
for _ in range(60):
time.sleep(5)
result = requests.post(
"https://api.anti-captcha.com/getTaskResult",
json={"clientKey": self.api_key, "taskId": task_id},
)
data = result.json()
if data["status"] == "ready":
return data["solution"]["gRecaptchaResponse"]
raise TimeoutError("Solve timeout")
Gardez anticaptcha actif le temps de comparer les deux sur une semaine de trafic réel. Trois précautions :
- Dimensionnement. CaptchaAI facture au thread simultané, avec des résolutions illimitées par thread : comptez vos requêtes en vol, pas votre volume mensuel. Le plan d'entrée est BASIC ($15/mois, 5 threads), facturé en dollars US.
- RGPD. Nettoyez votre journalisation au passage : ni données personnelles dans les payloads, ni tokens conservés au-delà de leur durée de vie utile.
- Bascule progressive. Commencez par les types les moins critiques (image, Turnstile), gardez reCAPTCHA v2 pour la fin.
Dépannage de la migration
| Problème | Cause | Correctif |
|---|---|---|
| Erreur de format à l'envoi | Tâche JSON typée attendue côté Anti-Captcha | Paramètres en data= vers in.php |
Champ method manquant |
Noms de tâches sans équivalent direct | userrecaptcha, turnstile, geetest ou bls |
| Polling sans token | Mauvais endpoint de résultat | GET vers res.php avec action=get |
| Token accepté, action refusée | Page Challenge et non widget Turnstile | Méthode Cloudflare Challenge dédiée |
FAQ
CaptchaAI prend-il en charge hCaptcha et FunCaptcha ?
Non — pas encore pris en charge, ni l'un ni l'autre. Gardez Anti-Captcha sur ces flux.
Combien de threads prévoir pour remplacer mon volume actuel ?
Partez de vos requêtes simultanées en pointe, pas de votre total mensuel : un thread traite une résolution à la fois. Cinq suffisent à un scraper séquentiel ; un parc de workers parallèles demande un plan supérieur.
Peut-on faire tourner les deux fournisseurs en parallèle ?
Oui, et c'est la méthode la plus sûre : le wrapper ci-dessus expose une seule signature, vous comparez réussite et temps de résolution sur le même trafic.
GeeTest v4 est-il disponible chez CaptchaAI ?
Non, il est annoncé « à venir ». Traitez-le comme un point bloquant du plan de migration.
Guides connexes
Prêt à comparer sur vos cibles ? Ouvrez un compte CaptchaAI et rejouez vos scénarios Cloudflare et BLS.