Solveur de captcha pour
Playwright
Résolvez le défi pendant l'exécution au lieu de faire échouer la tâche. Un exemple Python fonctionnel, et les trois points qui décident si votre token est accepté.
import time
import requests
CAPTCHANO_KEY = "cn-YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {CAPTCHANO_KEY}"}
def solve(task: dict) -> dict:
"""Block until solved; returns e.g. {"token": "...", "userAgent": "..."}."""
r = requests.post(
"https://api.captchano.com/v1/solve",
params={"wait": 60},
json=task,
headers=HEADERS,
timeout=75,
)
data = r.json()
# A solve can outlast the 60 s wait: poll the task until it finishes.
while data.get("status") in ("queued", "solving"):
time.sleep(5)
data = requests.get(
f"https://api.captchano.com/v1/task/{data['id']}",
headers=HEADERS,
timeout=30,
).json()
if data.get("status") != "ready":
raise RuntimeError(data.get("error") or data)
return data["solution"]
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com/register")
sitekey = page.get_attribute("[data-sitekey]", "data-sitekey")
solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": page.url})
page.evaluate(
"t => document.getElementById('g-recaptcha-response').value = t",
solution["token"],
)
page.click("button[type=submit]")Ce qui décide si le token est accepté
- Transmettez votre proxy. Le token doit être généré derrière la même IP de sortie que celle qui le soumet. Pour les systèmes qui notent la session, c'est obligatoire, pas une simple optimisation.
- Utilisez le même user agent. Turnstile et plusieurs systèmes anti-bot lient le token à un user agent. Nous renvoyons celui utilisé pour que vous puissiez le reproduire exactement.
- Demandez-le au dernier moment. Les tokens expirent au bout d'environ 120 secondes. Demandez-en un quand vous êtes prêt à soumettre.
Appel bloquant ou polling
L'exemple utilise ?wait=60 : l'appel renvoie la résolution terminée et votre étape Playwright reste linéaire. Si vous préférez ne pas garder une connexion ouverte, retirez le paramètre, conservez l'id renvoyé et interrogez GET /v1/task/{id} toutes les cinq secondes. Un token que vous avez payé reste récupérable pendant dix minutes : une connexion interrompue ne vous fait donc pas perdre la résolution.
Coût
$0.00598 par résolution réussie de reCAPTCHA v2, les résolutions échouées n'étant jamais facturées. Consultez les tarifs pour chaque type de défi, ou la référence de l'API pour le format complet des requêtes.
Comment la résolution s'intègre à Playwright
Les locators de Playwright facilitent la lecture du widget, et page.evaluate injecte le token. Résolvez le plus tard possible pour que la durée de vie de deux minutes du token ne soit pas consommée par la navigation.
- 01Créer un contexte
browser.new_context avec le proxy et le user agent depuis lesquels vous enverrez le formulaire.
- 02Lire le widget
page.locator('[data-sitekey]').first, puis get_attribute pour la sitekey et le callback.
- 03Résoudre
Envoyez un POST à /v1/solve?wait=60 avec le type, la sitekey, page.url, le proxy et le user agent.
- 04Injecter, envoyer, vérifier
Utilisez page.evaluate pour injecter, cliquez sur le bouton d'envoi, puis vérifiez ce que la page affiche réellement.
Injecter le token dans la page
page.evaluate remplit le champ de réponse et appelle la fonction data-callback avec le token.
Là où les intégrations échouent le plus souvent
Un script qui affiche 'solved' après avoir cliqué sur envoyer n'a rien vérifié. Faites une assertion sur l'état de succès de la page.
Définissez le proxy sur le contexte que vous utilisez pour la page, et envoyez le même avec la résolution.
Si la page appelle grecaptcha.render, cherchez le nom du callback dans le script de la page elle-même.
FAQ captcha Playwright
Playwright peut-il contourner les captchas sans solveur ?
Pas de manière fiable. Playwright automatise le navigateur mais ne peut pas répondre aux défis image. Les bibliothèques de transcription audio fonctionnent parfois, mais elles dépendent de la présence de l'option audio, souvent refusée aux sessions automatisées.
Cela fonctionne-t-il avec Playwright pour Node, Java et .NET ?
Oui. L'exemple est en Python, mais le flux repose sur le même appel HTTP et le même page.evaluate dans tous les bindings de langage de Playwright.
Comment tester mes propres formulaires avec Playwright ?
Ne résolvez pas votre propre captcha en CI. Utilisez les clés de test du fournisseur, comme la sitekey de test reCAPTCHA de Google ou les clés de test Turnstile de Cloudflare, pour que vos tests soient rapides et gratuits.
Et reCAPTCHA v3 dans Playwright ?
v3 n'a pas de widget à remplir. Demandez un token v3 avec le nom d'action de la page et envoyez-le là où la page envoie son propre token, généralement dans un champ de formulaire ou dans le corps de la requête.
Guides utiles
Prêt à développer ?
Commencez par un essai gratuit de 3 jours, puis payez par résolution réussie à mesure que votre trafic augmente. Aucune carte requise pour l'essai.