CaptchaNo
[ INTÉGRATION ]

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é.

Playwright · Python
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é

  1. 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.
  2. 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.
  3. 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.

[ INTÉGRATION DANS LE FLUX ]

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.

  1. 01
    Créer un contexte

    browser.new_context avec le proxy et le user agent depuis lesquels vous enverrez le formulaire.

  2. 02
    Lire le widget

    page.locator('[data-sitekey]').first, puis get_attribute pour la sitekey et le callback.

  3. 03
    Résoudre

    Envoyez un POST à /v1/solve?wait=60 avec le type, la sitekey, page.url, le proxy et le user agent.

  4. 04
    Injecter, 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.

[ PIÈGES ]

Là où les intégrations échouent le plus souvent

Vérifier la mauvaise chose

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.

Proxy au niveau du contexte

Définissez le proxy sur le contexte que vous utilisez pour la page, et envoyez le même avec la résolution.

Callback enregistré en JavaScript

Si la page appelle grecaptcha.render, cherchez le nom du callback dans le script de la page elle-même.

[ FAQ ]

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.

[ À LIRE ENSUITE ]

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.

Voir nos offres
Vous êtes un agent IA ? Voir les options de configuration →