Explications Techniques

reCAPTCHA v2 Invisible : Détection et résolution de déclencheurs

reCAPTCHA v2 Invisible n'a pas de case à cocher visible. Il s'active automatiquement lorsqu'un utilisateur soumet un formulaire ou clique sur un bouton, et affiche un défi uniquement si l'analyse des risques de Google détecte un comportement suspect. Cela rend la détection plus difficile dans l'automatisation : vous ne réaliserez peut-être pas qu'il existe un CAPTCHA jusqu'à ce que la soumission de votre formulaire échoue.


En quoi Invisible reCAPTCHA diffère de la version standard v2

Caractéristique Norme reCAPTCHA v2 reCAPTCHA v2 Invisible
Widget visible Oui (case à cocher) Non (badge uniquement)
Interaction de l'utilisateur Cliquez sur la case à cocher Automatique lors de la soumission du formulaire
data-size normal ou compact invisible
Fenêtre contextuelle du défi Toujours possible Uniquement pour les utilisateurs suspects
Élément DOM .g-recaptcha div .g-recaptcha div ou programmatique

Détection du reCAPTCHA invisible

Méthode 1 : vérifier l'attribut data-size

// Browser console
const widgets = document.querySelectorAll('.g-recaptcha');
widgets.forEach((el, i) => {
  const size = el.getAttribute('data-size');
  const sitekey = el.getAttribute('data-sitekey');
  console.log(`Widget ${i}: size=${size}, sitekey=${sitekey}`);
  if (size === 'invisible') {
    console.log('  → This is Invisible reCAPTCHA');
  }
});

Méthode 2 : Vérifier le badge

Invisible reCAPTCHA affiche un petit badge dans le coin :

const badge = document.querySelector('.grecaptcha-badge');
if (badge) {
  console.log('reCAPTCHA badge found — likely Invisible reCAPTCHA');
  console.log('Badge visibility:', getComputedStyle(badge).visibility);
}

Méthode 3 : vérifier les appels grecaptcha.execute

Si la page utilise l'invocation programmatique (pas de div .g-recaptcha) :

// Look for grecaptcha.execute in page scripts
document.querySelectorAll('script:not([src])').forEach(s => {
  if (s.textContent.includes('grecaptcha.execute')) {
    console.log('Found grecaptcha.execute — Invisible reCAPTCHA');
    const match = s.textContent.match(/grecaptcha\.execute\s*\(\s*['"]?([^'",\s)]+)/);
    if (match) console.log('Sitekey:', match[1]);
  }
});

Méthode 4 : vérifier le paramètre de rendu de la balise de script

document.querySelectorAll('script[src*="recaptcha"]').forEach(s => {
  if (s.src.includes('render=') && !s.src.includes('render=explicit')) {
    console.log('Invisible/v3 reCAPTCHA detected in script:', s.src);
  }
});

Résolution avec CaptchaAI

La principale différence : passez invisible=1 à CaptchaAI pour que le solveur sache qu'il gère une variante invisible.

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit with invisible flag
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-SITEKEY",
    "pageurl": "https://example.com/login",
    "invisible": "1",  # critical for Invisible reCAPTCHA
    "json": "1",
}).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]
print(f"Submitted: {task_id}")

# Poll for result
for _ in range(24):
    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["status"] == 1:
        print(f"Token: {result['request'][:50]}...")
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

Javascript

const axios = require('axios');

const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: 'YOUR_API_KEY',
    method: 'userrecaptcha',
    googlekey: '6Le-SITEKEY',
    pageurl: 'https://example.com/login',
    invisible: 1,
    json: 1,
  }
});
const taskId = resp.data.request;
console.log(`Submitted: ${taskId}`);

Injection de jetons pour Invisible reCAPTCHA

Invisible reCAPTCHA est généralement lié à un bouton ou à un formulaire de soumission. Après l'injection, vous devez déclencher le rappel ou soumettre le formulaire :

from selenium import webdriver
from selenium.webdriver.common.by import By

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

# After solving, inject and trigger
driver.execute_script("""
    // Set the token
    document.querySelector('textarea[name="g-recaptcha-response"]').value = arguments[0];

    // Find and trigger the callback
    var widget = document.querySelector('.g-recaptcha');
    var callbackName = widget ? widget.getAttribute('data-callback') : null;

    if (callbackName && typeof window[callbackName] === 'function') {
        window[callbackName](arguments[0]);
    }
""", token)

# Submit the form
driver.find_element(By.CSS_SELECTOR, "form#login").submit()

Identifier l'élément déclencheur

Le reCAPTCHA invisible peut être lié à un bouton spécifique :

<button class="g-recaptcha"
        data-sitekey="6Le-SITEKEY"
        data-callback="onSubmit"
        data-size="invisible">
  Submit
</button>

Ou activé par programme :

// Site's code
document.getElementById('submit-btn').addEventListener('click', function() {
  grecaptcha.execute();
});

Vérifiez les deux modèles :

// Find elements with g-recaptcha class that are buttons
document.querySelectorAll('button.g-recaptcha, input.g-recaptcha').forEach(el => {
  console.log('Trigger element:', el.tagName, el.textContent.trim());
  console.log('  data-sitekey:', el.getAttribute('data-sitekey'));
  console.log('  data-callback:', el.getAttribute('data-callback'));
});

Dépannage

Problème Parce que Corriger
Jeton rejeté invisible=1 manquant dans la soumission Ajouter invisible: "1" à la requête CaptchaAI
Impossible de trouver la clé du site Pas de div .g-recaptcha Recherchez les appels programmatiques grecaptcha.render() ou grecaptcha.execute()
Le formulaire est soumis mais échoue Rappel non déclenché Recherchez et appelez la fonction data-callback
CAPTCHA non détecté Apparaît uniquement pour le trafic suspect Recherchez l'élément grecaptcha-badge ou les balises de script recaptcha

FAQ

Comment distinguer Invisible v2 de v3 ?

Invisible v2 utilise grecaptcha.execute() sans paramètre action. La v3 utilise grecaptcha.execute(sitekey, {action: 'submit'}) avec une action. De plus, la v3 utilise render=SITEKEY dans l'URL du script.

Est-ce important d’oublier le drapeau invisible ?

Oui. Sans invisible=1, le solveur peut essayer une approche de résolution différente qui produit des jetons rejetés par le site.

Puis-je résoudre Invisible reCAPTCHA sans navigateur ?

Oui, vous n'avez besoin que de la clé du site et de l'URL de la page. Le navigateur n'a besoin que d'injecter le jeton et de déclencher le rappel.


Résolvez reCAPTCHA v2 Invisible de manière transparente avec CaptchaAI

Obtenez votre clé API surcaptchaai.com.


Guides associés

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