Tutoriels API

Comment résoudre reCAPTCHA Invisible à l'aide de l'API

Invisible reCAPTCHA se déclenche lorsqu'un utilisateur clique sur un bouton ou soumet un formulaire – il n'y a pas de case à cocher. Le défi se déroule en arrière-plan et la page ne continue que lorsque le jeton est vérifié. Le résoudre via CaptchaAI est similaire à la norme v2, avec un ajout clé : vous devez transmettre invisible=1 dans votre requête API.

La plus grande différence en matière d'intégration réside dans la manière dont vous injectez le jeton. La plupart des implémentations invisibles utilisent une fonction de rappel au lieu du champ masqué g-recaptcha-response. Vous devez trouver et rappeler ce rappel.

Vous ne savez pas s'il est invisible ou standard v2 ? LirereCAPTCHA v2 vs Invisible expliquépour des conseils de détection.


Ce dont vous avez besoin

Exigence Détails
Clé API CaptchaAI captchaai.com/api.php
Clé du site Depuis data-sitekey sur le widget ou le bouton
URL de la page URL complète où s'exécute le CAPTCHA invisible
Outil de navigation Selenium/Puppeteer pour exécuter le rappel

Étape 1 : Détecter les reCAPTCHA invisibles

Recherchez ces modèles dans la page HTML :

<!-- Option 1: div with data-size="invisible" -->
<div class="g-recaptcha" data-sitekey="6LdKlZEU..." data-size="invisible" data-callback="onSubmit"></div>

<!-- Option 2: button with data-sitekey (invisible by default) -->
<button data-sitekey="6LdKlZEU..." data-callback="onSubmit">Submit</button>

<!-- Option 3: programmatic execution -->
<script>
  grecaptcha.execute('6LdKlZEU...', {action: 'submit'});
</script>

Si vous voyez data-size="invisible", un bouton avec data-sitekey ou grecaptcha.execute() sans conteneur, il s'agit d'un reCAPTCHA invisible.

Étape 2 : Soumettre à CaptchaAI

import requests

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6LdKlZEUAAAAAPoxm...",
    "pageurl": "https://example.com/signup",
    "invisible": 1,
    "json": 1
})

task_id = response.json()["request"]
const params = new URLSearchParams({
  key: "YOUR_API_KEY", method: "userrecaptcha",
  googlekey: "6LdKlZEUAAAAAPoxm...",
  pageurl: "https://example.com/signup",
  invisible: 1, json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const { request: taskId } = await res.json();

Étape 3 : Sondage pour le résultat

import time

for _ in range(40):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        token = result["request"]
        break
    if result.get("request") != "CAPCHA_NOT_READY":
        raise RuntimeError(f"Error: {result['request']}")

Étape 4 : Injecter le jeton via un rappel

C’est l’étape critique. Invisible reCAPTCHA attend une fonction de rappel, pas seulement une valeur de champ masquée :

# Selenium example
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com/signup")

# Find the callback name
callback = driver.execute_script("""
    var el = document.querySelector('[data-callback]');
    if (el) return el.getAttribute('data-callback');
    var btn = document.querySelector('[data-sitekey]');
    if (btn) return btn.getAttribute('data-callback');
    return null;
""")

# Execute the callback with the token
if callback:
    driver.execute_script(f"window['{callback}']('{token}');")
else:
    # Fallback: fill hidden field and submit
    driver.execute_script(f"""
        document.getElementById('g-recaptcha-response').innerHTML = '{token}';
        document.querySelector('form').submit();
    """)
// Puppeteer example
await page.evaluate((token) => {
  const el = document.querySelector('[data-callback]') || document.querySelector('[data-sitekey]');
  const callbackName = el?.getAttribute('data-callback');

  if (callbackName && window[callbackName]) {
    window[callbackName](token);
  } else {
    document.getElementById('g-recaptcha-response').innerHTML = token;
    document.querySelector('form').submit();
  }
}, token);

Fonction de travail complète

import requests
import time

def solve_invisible_recaptcha(api_key, sitekey, page_url):
    submit = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": api_key, "method": "userrecaptcha", "googlekey": sitekey,
        "pageurl": page_url, "invisible": 1, "json": 1
    }).json()

    if submit.get("status") != 1:
        raise RuntimeError(f"Submit error: {submit.get('request')}")

    task_id = submit["request"]

    for _ in range(40):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise RuntimeError(f"Solve error: {result.get('request')}")

    raise TimeoutError("Timed out")

token = solve_invisible_recaptcha("YOUR_API_KEY", "6LdKlZEU...", "https://example.com/signup")

Exemple entièrement exécutable

Besoin d'un projet de travail complet avec configuration de l'environnement, interrogation, tentatives et gestion des erreurs ?

Voir l'exemple exécutable complet sur GitHub →


FAQ

Comment savoir si reCAPTCHA est invisible ?

Recherchez data-size="invisible" sur le widget div ou sur un bouton avec data-sitekey. S'il n'y a pas de case à cocher visible, elle est probablement invisible.

Ai-je besoin d'invisible=1 pour le reCAPTCHA invisible ?

Oui. Sans cela, CaptchaAI traite la tâche comme une v2 standard et le token peut être rejeté.

Que faire si je ne trouve pas la fonction de rappel ?

Essayez de remplir le champ caché g-recaptcha-response et de soumettre le formulaire. Certaines implémentations invisibles reviennent à cette méthode. Si cela échoue, recherchez sur la page JavaScript les fonctions qui gèrent les réponses reCAPTCHA.

Le reCAPTCHA invisible peut-il être Enterprise ?

Oui. Ajoutez à la fois invisible=1 et enterprise=1 à votre demande.

Pourquoi la page ne répond-elle pas après l'exécution du rappel ?

Le nom du rappel est peut-être erroné ou la page peut s'attendre à des champs de formulaire supplémentaires. Vérifiez le nom exact du rappel et assurez-vous que tous les champs du formulaire requis sont remplis avant le déclenchement du rappel.


Commencez à résoudre le reCAPTCHA invisible

Obtenez votre clé API surcaptchaai.com/api.php. Ajoutez invisible=1 à votre code de résolution v2 et utilisez le modèle d'injection de rappel ci-dessus.


Guides associés

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