Hintergründe

reCAPTCHA v2 Invisible: Trigger erkennen und lösen

reCAPTCHA v2 Invisible lösen Sie in drei Schritten: das Widget im DOM erkennen, den Sitekey extrahieren und das Token mit dem Flag invisible=1 über CaptchaAI anfordern. Die eigentliche Hürde liegt nicht im Lösen, sondern in der Erkennung – denn diese Variante hat kein Kontrollkästchen. Statt eines sichtbaren Widgets läuft die Risikoprüfung von Google im Hintergrund und ist an einen Button-Klick oder das Absenden eines Formulars gekoppelt. In vielen Automatisierungen fällt das CAPTCHA erst dann auf, wenn die Formularübermittlung ohne erkennbaren Grund fehlschlägt.

reCAPTCHA v2 Invisible gegenüber Standard v2

Beide Varianten teilen sich denselben Sitekey-Aufbau und dieselbe API-Methode (userrecaptcha). Der Unterschied liegt darin, wie und wann die Abfrage ausgelöst wird:

Merkmal reCAPTCHA v2 Standard reCAPTCHA v2 Invisible
Sichtbares Widget Ja (Kontrollkästchen) Nein (nur Badge)
Benutzerinteraktion Klick auf das Kontrollkästchen Automatisch beim Absenden des Formulars
data-size normal oder compact invisible
Challenge-Popup Immer möglich Nur für verdächtige Benutzer
DOM-Element .g-recaptcha-div .g-recaptcha-div oder programmatisch

Weil das Popup nur bei auffälligem Datenverkehr erscheint, bleibt Invisible reCAPTCHA in einem sauberen Testlauf oft unsichtbar – und schlägt später in der Produktion unerwartet zu. Deshalb lohnt es sich, die Erkennung fest in Ihre Pipeline einzubauen, statt sich auf einen einzelnen Durchlauf zu verlassen.

Wann Invisible reCAPTCHA in der Praxis auffällt

Ein typisches DACH-Szenario: Sie testen die Anmeldung eines Kundenportals in einer eigenen Staging-Umgebung, deren Worker auf einem Hetzner-Server laufen. Im ersten Durchlauf sah das Login-Formular unauffällig aus, doch nach dem Deploy scheiterten plötzlich einzelne Submissions – ein klassisches Zeichen für Invisible reCAPTCHA, das erst bei erhöhtem Datenverkehr eine Challenge zeigt.

Für den parallelen Betrieb ist außerdem das Abrechnungsmodell relevant: CaptchaAI rechnet pro gleichzeitigem Thread ab – nicht pro Lösung.

  • BASIC (15 $/Monat, 5 Threads): verarbeitet fünf Invisible-Abfragen gleichzeitig, mit unbegrenzten Lösungen pro Thread.
  • ADVANCE (90 $/Monat, 50 Threads): dieselbe Abrechnung, mehr paralleler Durchsatz für größere Test- oder Scraping-Läufe.

Bei Setups mit echten Nutzerdaten gilt in der DACH-Region zudem: IP-Adressen zählen als personenbezogene Daten – prüfen Sie Ihre Datenflüsse und die Rechtsgrundlage nach DSGVO.

reCAPTCHA v2 Invisible im DOM erkennen

Vier Signale verraten die unsichtbare Variante. Prüfen Sie sie der Reihe nach – in der Praxis reicht meist schon das erste oder zweite Muster:

  • das Attribut data-size="invisible" am .g-recaptcha-Element;
  • das eingeblendete .grecaptcha-badge in der Seitenecke;
  • ein grecaptcha.execute()-Aufruf in einem Inline-Skript;
  • der Parameter render= im Skript-Tag von reCAPTCHA.

Methode 1: das Attribut data-size prüfen

// 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');
  }
});

Methode 2: nach dem Badge suchen

Invisible reCAPTCHA blendet ein kleines Badge in der Ecke ein:

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

Methode 3: Aufrufe von grecaptcha.execute prüfen

Wenn die Seite die Abfrage programmatisch auslöst (ohne .g-recaptcha-div):

// 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]);
  }
});

Methode 4: den render-Parameter des Skript-Tags prüfen

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);
  }
});

reCAPTCHA v2 Invisible mit CaptchaAI lösen

Der entscheidende Unterschied zur Standardvariante: Übergeben Sie invisible=1, damit der Solver die unsichtbare Variante korrekt behandelt und ein von der Seite akzeptiertes Token liefert. reCAPTCHA v2 Invisible löst CaptchaAI typischerweise in unter 30 Sekunden mit hoher Erfolgsquote auf unterstützten Typen.

Die Anfrage an CaptchaAI braucht dafür nur drei Angaben plus das Flag:

  • googlekey – der aus dem DOM ausgelesene Sitekey;
  • pageurl – die URL der Seite mit der Abfrage;
  • invisible=1 – der Schalter, der die unsichtbare Variante kennzeichnet.

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}`);

Token einfügen und Callback auslösen

Invisible reCAPTCHA hängt in der Regel an einer Schaltfläche oder am Absenden des Formulars. Es genügt also nicht, nur das Token zu setzen – zwei Schritte gehören zusammen:

  1. das Token in das versteckte Feld g-recaptcha-response schreiben;
  2. anschließend den Callback aufrufen oder das Formular absenden, damit die Seite den Wert verarbeitet.

Beides erledigt das folgende Selenium-Snippet in einem Durchgang:

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()

Da ein Token nach rund 120 Sekunden abläuft, sollten Sie die Lösung erst kurz vor dem Absenden anfordern – so bleibt zwischen Lösung und Übermittlung genug Puffer.

Das Auslöseelement identifizieren

Ob der Callback zuverlässig feuert, hängt davon ab, an welches Element die Abfrage überhaupt gebunden ist. Invisible reCAPTCHA lässt sich direkt an eine Schaltfläche binden:

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

Oder es wird programmatisch aktiviert:

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

Prüfen Sie beide Muster, damit Sie das richtige Element ansteuern und den passenden Callback finden:

// 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'));
});

Der Wert von data-callback ist der Schlüssel: Er nennt die Funktion, die nach einer erfolgreichen Lösung das Formular tatsächlich weiterleitet.

Fehlerbehebung

Problem Ursache Lösung
Token abgelehnt invisible=1 fehlt in der Übermittlung invisible: "1" zur CaptchaAI-Anfrage hinzufügen
Sitekey nicht auffindbar Kein .g-recaptcha-div Nach programmatischen grecaptcha.render()- oder grecaptcha.execute()-Aufrufen suchen
Formular wird gesendet, schlägt aber fehl Callback nicht ausgelöst Die data-callback-Funktion finden und aufrufen
CAPTCHA nicht erkannt Erscheint nur bei verdächtigem Datenverkehr Auf das grecaptcha-badge-Element oder reCAPTCHA-Skript-Tags prüfen

Das Wesentliche auf einen Blick

  • Erkennen: Badge, data-size="invisible" oder ein grecaptcha.execute()-Aufruf verraten die unsichtbare Variante.
  • Lösen: Sitekey und Seiten-URL mit invisible=1 an CaptchaAI übergeben – typischerweise in unter 30 Sekunden gelöst.
  • Einfügen: Token setzen, Callback auslösen, Formular absenden – und erst kurz vor der Übermittlung anfordern, weil das Token nach rund 120 Sekunden abläuft.

Häufige Fragen

Woran erkenne ich reCAPTCHA v2 Invisible auf einer Seite?

Am schnellsten am Badge in der Seitenecke (.grecaptcha-badge) oder am Attribut data-size="invisible" am .g-recaptcha-Element. Fehlt beides, deutet ein grecaptcha.execute()-Aufruf in einem Inline-Skript auf die programmatische Variante hin.

Brauche ich einen Browser, um Invisible reCAPTCHA zu lösen?

Nein – für die Lösung selbst genügen Sitekey und Seiten-URL, die Sie an CaptchaAI übergeben. Einen Browser (etwa Selenium) benötigen Sie nur, um das zurückgelieferte Token einzufügen und den Callback auszulösen.

Wie unterscheide ich Invisible v2 von reCAPTCHA v3?

Invisible v2 ruft grecaptcha.execute() ohne action-Parameter auf. reCAPTCHA v3 verwendet grecaptcha.execute(sitekey, {action: 'submit'}) mit einer Aktion und lädt das Skript mit render=SITEKEY in der URL.

Wie lange ist ein gelöstes Invisible-Token gültig?

Rund 120 Sekunden. Fordern Sie die Lösung deshalb erst kurz vor dem Absenden an und rufen Sie den Callback direkt nach dem Einfügen auf – sonst läuft das Token ab, bevor die Seite es verarbeitet.

Kann ich mehrere Invisible-Abfragen parallel lösen?

Ja. Der parallele Durchsatz hängt an Ihrer Thread-Anzahl: Jeder Thread verarbeitet eine laufende Abfrage, und alle Tarife bieten unbegrenzte Lösungen pro Thread innerhalb des Abrechnungsmonats.

reCAPTCHA v2 Invisible zuverlässig mit CaptchaAI lösen

Holen Sie sich Ihren API-Schlüssel unter captchaai.com und binden Sie die Erkennung fest in Ihre Automatisierung ein.

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.