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-badgein 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:
- das Token in das versteckte Feld
g-recaptcha-responseschreiben; - 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 eingrecaptcha.execute()-Aufruf verraten die unsichtbare Variante. - Lösen: Sitekey und Seiten-URL mit
invisible=1an 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.