Ihr Skript füllt das Formular sauber aus, klickt auf „Absenden" – und der Server verwirft die Anfrage kommentarlos. Kein Kontrollkästchen, kein Bildraster, keine Fehlermeldung. Meist steckt ein unsichtbares CAPTCHA dahinter: eine Prüfung, die im Hintergrund per JavaScript Browserverhalten, Gerätesignale und Netzwerkreputation bewertet, bevor jemand etwas anklickt. Solche Systeme sieht man nicht – man erkennt sie im Seitenquelltext. Dieser Artikel zeigt, welche Verfahren Ihnen begegnen, wie Sie sie identifizieren und wie Sie ihre Token in einer Automatisierung erzeugen.
Das Wichtigste in Kürze
- Warum sehe ich kein CAPTCHA? Die Bewertung läuft still im Hintergrund und wird erst bei erhöhtem Risiko sichtbar.
- Brauche ich trotzdem ein Token? Ja – auch unsichtbare Systeme erzeugen ein Token, das mit dem Formular übermittelt wird.
- Welche Systeme sind am häufigsten? reCAPTCHA v3 und Cloudflare Turnstile.
- Woran erkenne ich das Problem? Verschiedene Nutzer oder Sessions stoßen auf unterschiedlich viel Reibung.
So arbeiten unsichtbare CAPTCHAs im Hintergrund
Alle unsichtbaren CAPTCHAs folgen demselben Grundmuster: Das Skript sammelt ab dem Seitenaufruf Signale, verdichtet sie zu einem Risikowert und liefert je nach Bewertung ein stilles Token, eine leichte oder eine vollständige Abfrage zurück.
Page loads → CAPTCHA JavaScript injected
↓
Script runs in background, collecting signals:
├─ Browser fingerprint (canvas, WebGL, fonts, plugins)
├─ Behavioral data (mouse, keyboard, scroll, timing)
├─ Network data (IP reputation, TLS fingerprint)
├─ Device data (screen, GPU, CPU cores, memory)
└─ History data (cookies, previous CAPTCHA completions)
↓
Signals sent to CAPTCHA provider's risk engine
↓
Risk score computed
↓
Response varies by score:
├─ Low risk → Token issued silently (user sees nothing)
├─ Medium → Light challenge shown (checkbox, simple click)
└─ High risk → Full challenge (image grid) or block
Der entscheidende Unterschied zu sichtbaren CAPTCHAs: Die Prüfung läuft ab dem Seitenaufruf kontinuierlich – nicht erst beim Klick auf ein Kontrollkästchen. Für die Automatisierung entsteht das relevante Token also ohne sichtbare Interaktion.
Die wichtigsten unsichtbaren CAPTCHA-Systeme
Vier Verfahren decken den Großteil der unsichtbaren Prüfungen im Web ab, dazu kommt mit Apple ein Sonderfall, der ein CAPTCHA ganz entfallen lässt.
reCAPTCHA v3 – der stille Score-Geber
- Anbieter: Google
- Erschienen: 2018
- Verbreitung: am höchsten unter den unsichtbaren Verfahren
reCAPTCHA v3 gibt für jede Seitenaktion einen Gleitkommawert zwischen 0,0 und 1,0 zurück. Was mit diesem Score geschieht, entscheidet allein der Websitebetreiber – v3 blockiert nie selbst.
<!-- reCAPTCHA v3 integration -->
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('SITE_KEY', { action: 'login' }).then(function(token) {
// Token sent to server for verification
document.getElementById('captcha-token').value = token;
});
});
</script>
Der execute()-Aufruf stößt die Signalerfassung bei Bedarf an. Im Hintergrund sammelt reCAPTCHA jedoch schon seit dem Laden des Skripts Daten. So lässt sich der zurückgegebene Score interpretieren:
| Punktzahl | Bedeutung | Typische Aktion |
|---|---|---|
| 0,9 | Sehr wahrscheinlich ein Mensch | Erlauben |
| 0,7 | Wahrscheinlich ein Mensch | Mit Überwachung zulassen |
| 0,5 | Unsicher | Zusätzliche Prüfung verlangen |
| 0,3 | Wahrscheinlich Bot | Blockieren oder reCAPTCHA v2 zeigen |
| 0,1 | Sehr wahrscheinlich Bot | Blockieren |
Im Seitenquelltext erkennen Sie v3 samt Sitekey und Aktionsnamen so:
import requests
import re
def detect_recaptcha_v3(url):
html = requests.get(url, timeout=10).text
indicators = {
"recaptcha_v3": False,
"site_key": None,
"actions": [],
}
# Check for v3 script
if "recaptcha/api.js?render=" in html:
indicators["recaptcha_v3"] = True
match = re.search(r"render=([A-Za-z0-9_-]+)", html)
if match:
indicators["site_key"] = match.group(1)
# Find action names
actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
indicators["actions"] = actions
return indicators
print(detect_recaptcha_v3("https://example.com/login"))
Cloudflare Turnstile – das schnell wachsende Verfahren
- Anbieter: Cloudflare
- Erschienen: 2022
- Verbreitung: am schnellsten wachsend
Turnstile setzt auf eine mehrstufige Verifizierungspipeline, die ohne aufdringliche Nutzerdatenerfassung auskommt. Die vier Stufen greifen der Reihe nach:
- Private-Access-Token-Prüfung – Unterstützt der Browser Apple PAT, ist die Prüfung sofort abgeschlossen.
- Nicht interaktive Abfrage – Der Browser löst im Hintergrund ein leichtes kryptografisches Proof-of-Work-Rätsel.
- Verwaltete Abfrage – Cloudflare entscheidet anhand von Risikosignalen aus dem eigenen Netzwerk zwischen nicht interaktiv und interaktiv (über 20 % des Internetverkehrs laufen über Cloudflare).
- Interaktive Abfrage – Erscheint nur bei hoher Risikobewertung und zeigt ein Widget im Kontrollkästchen-Stil.
Die Einbindung besteht aus einem Widget-Container und dem Loader-Skript:
<!-- Turnstile widget -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
Zur Erkennung genügt die Suche nach Loader-URL oder Widget-Klasse:
def detect_turnstile(url):
html = requests.get(url, timeout=10).text
indicators = {
"turnstile": False,
"site_key": None,
}
if "challenges.cloudflare.com/turnstile" in html or "cf-turnstile" in html:
indicators["turnstile"] = True
match = re.search(r'data-sitekey="([^"]+)"', html)
if match:
indicators["site_key"] = match.group(1)
return indicators
reCAPTCHA v2 Invisible – der versteckte Fallback
- Anbieter: Google
- Erschienen: 2017
Hierbei handelt es sich um reCAPTCHA v2, das beim Absenden des Formulars programmatisch ausgelöst wird. Kein Kontrollkästchen ist sichtbar: Der Nutzer klickt auf „Senden", reCAPTCHA läuft im Hintergrund, und erst bei hoher Risikobewertung erscheint doch noch eine sichtbare Bildabfrage als Popup.
<button class="g-recaptcha"
data-sitekey="SITE_KEY"
data-callback="onSubmit"
data-size="invisible">
Submit
</button>
Der Kernunterschied zu v3: v2 Invisible greift bei riskanten Nutzern weiterhin auf eine sichtbare Abfrage zurück. v3 zeigt nie eine sichtbare Abfrage – die Website muss selbst über den Score entscheiden.
hCaptcha Passiv (Enterprise)
- Anbieter: Intuition Machines
- Verfügbarkeit: nur in der Enterprise-Stufe
Der passive Modus von hCaptcha Enterprise bewertet den Nutzer ohne sichtbares Widget und stellt nur den auffälligsten Besuchern eine visuelle Abfrage. Wichtig für die Praxis: CaptchaAI unterstützt hCaptcha nicht – dieser Abschnitt beschreibt lediglich, wie das Verfahren selbst arbeitet.
Apple Private Access Tokens
- Anbieter: Apple
- Verfügbarkeit: iOS 16+, macOS Ventura+
Dies ist kein CAPTCHA-Anbieter, sondern ein Mechanismus, der ein CAPTCHA überflüssig machen kann. Apple-Geräte weisen ihre Echtheit über einen Hardware-Nachweis (Attestation) aus, sodass Websites die CAPTCHA-Prüfung vollständig überspringen dürfen.
Device attestation:
1. Website requests a challenge from a token issuer
2. Device proves it is genuine without revealing identity
3. Token issuer generates a blind-signed token
4. Website verifies token → CAPTCHA skipped
Unterstützt wird das Verfahren von Cloudflare, Fastly und weiteren CDN-Anbietern.
Unsichtbare CAPTCHAs in der Automatisierung lösen (mit CaptchaAI)
Auch unsichtbare CAPTCHAs erzeugen ein Token, das mit dem Formular übermittelt werden muss. API-basierte Solver berechnen dieses Token extern und geben es an Ihre Automatisierung zurück; Sie tragen es anschließend in das versteckte Formularfeld ein und senden das Formular ab.
reCAPTCHA v3 lösen
import requests
import time
API_KEY = "YOUR_API_KEY"
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9",
"pageurl": "https://example.com/login",
"version": "v3",
"action": "login",
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
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:
token = result["request"]
print(f"reCAPTCHA v3 token received (score ≥ 0.9)")
break
Der action-Wert muss zur jeweiligen Seitenaktion passen (etwa login oder checkout) – v3 gewichtet den Score auch danach.
Cloudflare Turnstile lösen
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
"pageurl": "https://example.com/signup",
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
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:
turnstile_token = result["request"]
print(f"Turnstile token received")
break
Dasselbe in Node.js: reCAPTCHA v3
const axios = require("axios");
async function solveRecaptchaV3(siteKey, pageUrl, action) {
const API_KEY = "YOUR_API_KEY";
// Submit
const { data: submit } = await axios.post(
"https://ocr.captchaai.com/in.php",
new URLSearchParams({
key: API_KEY,
method: "userrecaptcha",
googlekey: siteKey,
pageurl: pageUrl,
version: "v3",
action: action,
json: 1,
})
);
const taskId = submit.request;
// Poll
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const { data: result } = await axios.get(
"https://ocr.captchaai.com/res.php",
{
params: {
key: API_KEY,
action: "get",
id: taskId,
json: 1,
},
}
);
if (result.status === 1) {
return result.request;
}
}
throw new Error("Solve timeout");
}
solveRecaptchaV3("SITE_KEY", "https://example.com/login", "login")
.then((token) => console.log("Token:", token.substring(0, 50) + "..."));
Unsichtbare CAPTCHAs zuverlässig erkennen
Bevor Sie einen Solver einbinden, sollten Sie wissen, welches System aktiv ist. Der folgende Prüfer durchsucht den Seitenquelltext und meldet Typ, Sitekey und passende Solver-Methode:
import requests
import re
def detect_invisible_captcha(url):
"""Detect all invisible CAPTCHA types on a page."""
html = requests.get(url, timeout=10).text
results = []
# reCAPTCHA v3
if "recaptcha/api.js?render=" in html:
key = re.search(r"render=([A-Za-z0-9_-]+)", html)
results.append({
"type": "reCAPTCHA v3",
"site_key": key.group(1) if key else "unknown",
"solver_method": "userrecaptcha (version=v3)",
})
# reCAPTCHA v2 invisible
if 'data-size="invisible"' in html and "g-recaptcha" in html:
key = re.search(r'data-sitekey="([^"]+)"', html)
results.append({
"type": "reCAPTCHA v2 Invisible",
"site_key": key.group(1) if key else "unknown",
"solver_method": "userrecaptcha (invisible=1)",
})
# Cloudflare Turnstile
if "challenges.cloudflare.com/turnstile" in html:
key = re.search(r'data-sitekey="([^"]+)"', html)
results.append({
"type": "Cloudflare Turnstile",
"site_key": key.group(1) if key else "unknown",
"solver_method": "turnstile",
})
# hCaptcha (passive mode detected by script without visible widget)
if "hcaptcha.com/1/api.js" in html and 'data-size="invisible"' in html:
results.append({
"type": "hCaptcha Passive",
"solver_method": "hcaptcha",
})
if not results:
results.append({"type": "none detected"})
return results
for item in detect_invisible_captcha("https://example.com"):
print(item)
Die unsichtbaren Systeme im direkten Vergleich
| Merkmal | reCAPTCHA v3 | Cloudflare Turnstile | reCAPTCHA v2 Invisible | hCaptcha Passiv |
|---|---|---|---|---|
| Sichtbare Abfrage | Nie | Selten | Manchmal (Fallback) | Selten |
| Datenschutz | Sammelt Browserdaten | Keine personenbezogenen Daten | Sammelt Browserdaten | Sammelt Interaktionsdaten |
| Kosten | Kostenlos (1 Mio./Monat) | Kostenlos (unbegrenzt) | Kostenlos (1 Mio./Monat) | Nur Enterprise |
| Score zurückgegeben | Ja (0,0–1,0) | Nein (pass/fail) | Nein (pass/fail) | Ja (Enterprise) |
| Sichtbarer Fallback | Website entscheidet | Von Cloudflare verwaltet | Bildraster-Popup | Bildraster-Popup |
| CaptchaAI | Ja (v3-Token) | Ja (Turnstile-Token) | Ja (Token) | ❌ Nicht unterstützt |
DSGVO-Hinweis für DACH-Betreiber: reCAPTCHA v3 wertet Browser- und Netzwerkdaten aus, und eine IP-Adresse gilt in der EU als personenbezogenes Datum. Prüfen Sie Datenflüsse und Rechtsgrundlage Ihrer CAPTCHA-Einbindung; das datenschutzsparsame Design von Turnstile ist mit ein Grund für seine schnelle Verbreitung im DACH-Raum.
Häufige Fragen
Löst CaptchaAI unsichtbare CAPTCHAs, ohne dass ich das Widget sehe?
Ja, für die unterstützten Typen. reCAPTCHA v3 wird über die Methode userrecaptcha mit version=v3 gelöst, Cloudflare Turnstile über die Methode turnstile. hCaptcha – auch in der passiven Enterprise-Variante – gehört nicht zum unterstützten Umfang.
Wie lange ist ein unsichtbares Token gültig?
reCAPTCHA- und Turnstile-Token sind kurzlebig – in der Praxis meist rund 120 Sekunden. Lösen Sie das Token deshalb erst unmittelbar vor der Übermittlung und senden Sie das Formular direkt danach ab, sonst läuft es ab, bevor der Server es prüft.
Warum ist mein reCAPTCHA-v3-Score zu niedrig?
Ein niedriger Score entsteht meist durch Datacenter-IP-Adressen, fehlende Cookie- oder Browserhistorie oder einen action-Wert, der nicht zur Seitenaktion passt. Setzen Sie den action-Parameter genau wie auf der Zielseite – v3 gewichtet den Score pro Aktion.
Warum schlägt meine Automatisierung ohne Fehlermeldung fehl?
Weil ohne gültiges Token die Formularübermittlung still abgelehnt wird. Der Server gibt dann oft nur einen generischen Fehler oder gar nichts zurück – es fehlt die sichtbare CAPTCHA-Aufforderung, an der Sie das Problem festmachen könnten. Fehlt oder stimmt das Token nicht, scheitert die Anfrage einfach.
Ist reCAPTCHA v3 sicherer als v2?
Nicht automatisch. v3 ist visuell schwerer zu erkennen, liefert aber nur einen Score, auf den die Website reagieren muss. Ist der Schwellenwert zu niedrig gesetzt, passieren Bots problemlos. v2 erzwingt dagegen eine eindeutige Abfrage. In der Praxis bietet v3 mit striktem Schwellenwert (0,7+) plus v2 als Fallback den besten Schutz.
Fazit
Unsichtbare CAPTCHAs verifizieren Nutzer über eine Hintergrundanalyse von Browserverhalten, Gerätefingerabdrücken und Netzwerkreputation – ganz ohne sichtbare Interaktion. reCAPTCHA v3 und Cloudflare Turnstile dominieren das Feld, wobei Turnstile dank kostenloser Nutzung und datenschutzsparsamem Design am schnellsten wächst.
Für die Automatisierung bleibt eines gleich: Es wird weiterhin ein gültiges Token benötigt. CaptchaAI erzeugt diese Token zuverlässig – reCAPTCHA v3 über userrecaptcha mit version=v3, Cloudflare Turnstile über die Methode turnstile.