Hintergründe

Unsichtbare CAPTCHA-Systeme erklärt: Wie sie funktionieren

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:

  1. Private-Access-Token-Prüfung – Unterstützt der Browser Apple PAT, ist die Prüfung sofort abgeschlossen.
  2. Nicht interaktive Abfrage – Der Browser löst im Hintergrund ein leichtes kryptografisches Proof-of-Work-Rätsel.
  3. Verwaltete Abfrage – Cloudflare entscheidet anhand von Risikosignalen aus dem eigenen Netzwerk zwischen nicht interaktiv und interaktiv (über 20 % des Internetverkehrs laufen über Cloudflare).
  4. 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.

Verwandte Artikel

Kommentare sind für diesen Artikel deaktiviert.