Wenn Ihre Automatisierung plötzlich auf recaptcha/enterprise.js statt api.js trifft, lautet die Frage meist: Muss ich meine Integration umbauen? Die kurze Antwort ist nein. Aus Solver-Sicht wird reCAPTCHA Enterprise nahezu genauso gelöst wie reCAPTCHA v3 – der Unterschied liegt auf der Serverseite, wo Google zusätzlich zum Score konkrete Risikogründe, Betrugssignale und den Account Defender liefert. Dieser Deep Dive zeigt, wie die Assessment API aufgebaut ist und worauf Sie beim Automatisieren Enterprise-geschützter Seiten achten.
So läuft eine Enterprise-Bewertung ab
Der Ablauf hat zwei Hälften: Der Browser erzeugt ein Token, der Server macht daraus eine bewertete Antwort.
Client-side:
1. Load reCAPTCHA Enterprise script
2. Call grecaptcha.enterprise.execute(SITE_KEY, {action: 'LOGIN'})
3. Receive token
4. Send token to your backend
Server-side:
1. Create assessment via Enterprise API
2. Receive detailed risk analysis
3. Make access decision based on score + reasons
4. Optionally annotate the assessment (report fraud/legitimate)
Clientseitige Integration von reCAPTCHA Enterprise
Das JavaScript-SDK einbinden
Das SDK folgt dem Muster von reCAPTCHA v3: Skript laden, im ready-Callback eine action ausführen, Token ans Backend senden.
<script src="https://www.google.com/recaptcha/enterprise.js?render=SITE_KEY"></script>
<script>
grecaptcha.enterprise.ready(function() {
grecaptcha.enterprise.execute('SITE_KEY', { action: 'LOGIN' })
.then(function(token) {
// Send token to backend
fetch('/api/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token: token })
});
});
});
</script>
- Die Skript-URL endet auf
.../recaptcha/enterprise.jsstatt auf.../recaptcha/api.js. - Das API-Objekt heißt
grecaptcha.enterprisestattgrecaptcha. execute()liefert dasselbe Tokenformat zurück.
reCAPTCHA Enterprise im Seitenquelltext erkennen
Klären Sie zuerst die Variante – der zuverlässigste Marker steht in der Skript-URL.
import requests
import re
def detect_recaptcha_enterprise(url):
"""Detect if a page uses reCAPTCHA Enterprise."""
html = requests.get(url, timeout=10).text
indicators = {
"is_enterprise": False,
"is_standard": False,
"site_key": None,
"actions": [],
}
# Enterprise detection
if "recaptcha/enterprise.js" in html:
indicators["is_enterprise"] = True
match = re.search(r"render=([A-Za-z0-9_-]+)", html)
if match:
indicators["site_key"] = match.group(1)
# Standard v3 detection
elif "recaptcha/api.js?render=" in html:
indicators["is_standard"] = True
match = re.search(r"render=([A-Za-z0-9_-]+)", html)
if match:
indicators["site_key"] = match.group(1)
# Extract action names
actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
indicators["actions"] = list(set(actions))
return indicators
print(detect_recaptcha_enterprise("https://example.com/login"))
Die serverseitige Assessment API
Eine Bewertung erstellen
Diesen Schritt führt der Seitenbetreiber aus, nicht der Solver – er zeigt, welche Felder Google bewertet.
from google.cloud import recaptchaenterprise_v1
from google.cloud.recaptchaenterprise_v1 import Assessment
def create_assessment(project_id, site_key, token, action):
"""Create a reCAPTCHA Enterprise assessment."""
client = recaptchaenterprise_v1.RecaptchaEnterpriseServiceClient()
event = recaptchaenterprise_v1.Event()
event.site_key = site_key
event.token = token
event.expected_action = action
assessment = recaptchaenterprise_v1.Assessment()
assessment.event = event
request = recaptchaenterprise_v1.CreateAssessmentRequest()
request.assessment = assessment
request.parent = f"projects/{project_id}"
response = client.create_assessment(request)
return response
Aufbau der Assessment-Antwort
Die Antwort ist der Mehrwert von Enterprise. Wichtig sind vier Bereiche:
riskAnalysismitscoreundreasons,tokenPropertiesmit Gültigkeit, Hostname und Aktion,accountDefenderAssessmentmit den Konto-labels,eventmitsiteKey,expectedActionund optionalhashedAccountId.
{
"name": "projects/123456/assessments/abcdef123",
"event": {
"token": "...",
"siteKey": "6Le...",
"expectedAction": "LOGIN",
"hashedAccountId": "abc123..."
},
"riskAnalysis": {
"score": 0.9,
"reasons": [
"AUTOMATION",
"TOO_MUCH_TRAFFIC"
],
"extendedVerdictReasons": [
"BROWSER_ERROR"
]
},
"tokenProperties": {
"valid": true,
"hostname": "example.com",
"action": "LOGIN",
"createTime": "2025-01-15T10:30:00Z",
"invalidReason": ""
},
"accountDefenderAssessment": {
"labels": ["PROFILE_MATCH"]
}
}
Account Defender: Konten über den Lebenszyklus verfolgen
Der Account Defender bewertet nicht die Anfrage, sondern das Konto dahinter – über Registrierung, Login und Nutzung hinweg. Die Signale kommen als labels.
{
"accountDefenderAssessment": {
"labels": [
"PROFILE_MATCH",
"SUSPICIOUS_LOGIN_ACTIVITY",
"SUSPICIOUS_ACCOUNT_CREATION",
"RELATED_ACCOUNTS_NUMBER_HIGH"
]
}
}
| Label | Bedeutung |
|---|---|
PROFILE_MATCH |
Verhalten passt zum bekannten Profil dieses Kontos |
SUSPICIOUS_LOGIN_ACTIVITY |
Login-Muster weicht vom Normalfall ab (neues Gerät, neuer Standort) |
SUSPICIOUS_ACCOUNT_CREATION |
Kontoerstellung wirkt automatisiert |
RELATED_ACCOUNTS_NUMBER_HIGH |
Mehrere Konten mit demselben Gerät bzw. derselben Sitzung verknüpft |
WAF-Integration am Netzwerkrand
reCAPTCHA Enterprise lässt sich mit WAF-Anbietern koppeln und ergänzt CAPTCHA-Abfragen am Netzwerkrand.
Cloudflare WAF
Request arrives at Cloudflare edge
↓
Cloudflare WAF rule evaluates request
↓
Rule triggers reCAPTCHA Enterprise challenge
↓
Client solves CAPTCHA → token returned
↓
Cloudflare validates token via Enterprise API
↓
If valid + score above threshold → request forwarded to origin
F5 BIG-IP
F5 iRule or policy evaluates request
↓
Triggers reCAPTCHA Enterprise challenge page
↓
Client solves → token validated server-side
↓
F5 forwards or blocks based on assessment score
reCAPTCHA Enterprise in der Automatisierung lösen
Python: Enterprise-Token über CaptchaAI lösen
Enterprise-Token verhalten sich für den Solver identisch zu Standard-Token. Ein Beispiel: Ein Berliner SaaS-Team testet seine Login-Strecke auf einer Hetzner-Staging-Umgebung mit reCAPTCHA Enterprise. Nötig ist nur ein zusätzliches Flag – Übermittlung und Status-Abfrage bleiben gleich.
import requests
import time
API_KEY = "YOUR_API_KEY"
# Enterprise is solved with the same method
# The solver handles the Enterprise variant automatically
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
"pageurl": "https://enterprise-site.com/login",
"enterprise": 1, # Flag for Enterprise variant
"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"Enterprise token: {token[:50]}...")
break
Node.js
Dasselbe Muster mit axios; eine Schleife fragt das Ergebnis ab, bis der Status 1 ist.
const axios = require("axios");
async function solveEnterprise(sitekey, pageurl) {
const API_KEY = "YOUR_API_KEY";
const { data: submit } = await axios.post(
"https://ocr.captchaai.com/in.php",
new URLSearchParams({
key: API_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: pageurl,
enterprise: 1,
json: 1,
})
);
const taskId = submit.request;
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("Timeout");
}
Enterprise vs. Standard auf einer Zielseite erkennen
Für viele Seiten lohnt eine kompakte Routine, die die Variante direkt aus dem HTML ableitet.
def identify_recaptcha_version(html):
"""Determine which reCAPTCHA version a page uses."""
if "recaptcha/enterprise.js" in html:
return "enterprise"
elif "recaptcha/api.js?render=" in html:
return "v3"
elif "g-recaptcha" in html and 'data-size="invisible"' in html:
return "v2_invisible"
elif "g-recaptcha" in html:
return "v2"
else:
return "none"
Enterprise und Standard-v3 im Vergleich
Beide liefern einen Score von 0,0 bis 1,0; Enterprise begründet ihn und ergänzt die Betrugs- und Kontoabwehr.
| Merkmal | reCAPTCHA v3 (kostenlos) | reCAPTCHA Enterprise |
|---|---|---|
| Score | 0,0–1,0 | 0,0–1,0 + Score-Gründe |
| Risikoanalyse | Einfach | Detailliert (Betrugssignale, Kontoinformationen) |
| Score-Gründe | Nicht enthalten | Konkrete Gründe, die den Score erklären |
| Account Defender | Nein | Ja (verfolgt den Konto-Lebenszyklus) |
| WAF-Integration | Nein | Ja (Cloudflare, Fastly, F5) |
| Express-Assessment | Nein | Ja (nur serverseitig, ohne JS) |
| Erkennung von Passwort-Leaks | Nein | Ja |
| Preis | Kostenlos (1 Mio. Bewertungen/Monat) | 1 $ pro 1.000 Bewertungen (0–1 Mio. kostenlos) |
| API-Endpunkt | google.com/recaptcha/api/siteverify | recaptchaenterprise.googleapis.com |
Score-Gründe richtig deuten
Der wichtigste Zugewinn gegenüber v3: Enterprise nennt konkrete Gründe für einen niedrigen Score, im Feld reasons.
| Grund | Beschreibung | Auswirkung auf den Score |
|---|---|---|
AUTOMATION |
Automatisierter User-Agent oder Headless-Browser erkannt | -0,3 bis -0,7 |
UNEXPECTED_ENVIRONMENT |
Inkonsistenzen in der Browser- oder Geräteumgebung | -0,2 bis -0,4 |
TOO_MUCH_TRAFFIC |
Hohes Anfragevolumen aus dieser IP oder Sitzung | -0,1 bis -0,3 |
UNEXPECTED_USAGE_PATTERNS |
Verhaltenssignale weichen von menschlichen Mustern ab | -0,2 bis -0,5 |
LOW_CONFIDENCE_SCORE |
Zu wenig Daten für eine belastbare Einschätzung | Variabel |
SUSPECTED_CARDING |
Transaktionsmuster deutet auf Kreditkartenbetrug hin | -0,3 bis -0,6 |
SUSPECTED_CHARGEBACK |
Rückbuchungsrisiko anhand von Transaktionssignalen | -0,2 bis -0,4 |
Erweiterte Urteilsgründe (extendedVerdictReasons)
| Grund | Beschreibung |
|---|---|
BROWSER_ERROR |
JavaScript-Ausführungsfehler im CAPTCHA-SDK |
SITE_MISMATCH |
Token für eine andere Site erstellt als die, auf der validiert wird |
FAILED_TWO_FACTOR |
Zwei-Faktor-Authentifizierung ist kürzlich fehlgeschlagen |
Hinweis: Die genaue Score-Auswirkung je Grund veröffentlicht Google nicht; die Werte oben sind Erfahrungswerte und variieren je nach IP-Reputation und Traffic-Muster.
Typische Probleme und Lösungen
| Problem | Diagnose | Lösung |
|---|---|---|
| Token wird von der Enterprise API abgelehnt | Standardmethode für eine Enterprise-Seite verwendet | enterprise=1 zur Solver-Anfrage hinzufügen |
| Score bleibt trotz gültigem Token bei 0,1 | action-Parameter passt nicht |
Sicherstellen, dass action mit dem Wert der Seite übereinstimmt |
SITE_MISMATCH unter den Gründen |
Token für die falsche Domain erzeugt | pageurl exakt auf die Zielseite setzen |
AUTOMATION unter den Score-Gründen |
Solver-Umgebung erkannt | CaptchaAI regelt das intern; bei anhaltendem Problem den Support kontaktieren |
| Token gültig, aber die Seite blockiert weiterhin | Die Seite nutzt Prüfungen über das CAPTCHA hinaus | Auf weitere Bot-Erkennungsschichten prüfen (WAF-Regeln, serverseitige Verhaltensanalyse) |
Häufige Fragen
Kostet mich das Lösen von reCAPTCHA Enterprise mehr als Standard-reCAPTCHA?
Nein. CaptchaAI rechnet Thread-basiert ab – pro gleichzeitigem Thread, nicht pro Lösung, ohne Aufschlag nach CAPTCHA-Typ. Ein Enterprise-Token kostet damit genauso viel wie ein reCAPTCHA-v3-Token; der Einstieg beginnt bei BASIC (15 $/Monat, 5 Threads).
Welchen action-Wert muss ich übergeben – und warum ist er wichtig?
Den Wert, den die Zielseite in grecaptcha.enterprise.execute(...) verwendet, etwa LOGIN. Passt Ihr action-Parameter nicht zum Wert der Seite, bewertet Google das Token häufig mit einem niedrigen Score – selbst wenn es technisch gültig ist.
Warum bleibt der Score niedrig, obwohl mein Token gültig ist?
Ein gültiges Token und ein hoher Score sind zwei verschiedene Dinge. Der Score speist sich aus Signalen wie IP-Reputation, Anfragevolumen und Verhaltensmustern – sichtbar in den reasons-Feldern, die aber nur der Seitenbetreiber sieht, nicht der Solver.
Unterstützt CaptchaAI sowohl reCAPTCHA v2 Enterprise als auch v3 Enterprise?
Ja. Beide Enterprise-Varianten laufen über dieselbe userrecaptcha-Methode wie ihre Standard-Pendants; Sie ergänzen die Anfrage lediglich um enterprise=1. Ein eigenes Google-Cloud-Konto brauchen Sie dafür nicht – das benötigt nur der Seitenbetreiber.
Fazit
reCAPTCHA Enterprise erweitert das Standard-reCAPTCHA um Risikoanalyse, Score-Gründe, Account Defender und WAF-Integration. Für die Automatisierung ändert sich kaum etwas: Enterprise-Token lösen Sie wie Standard-reCAPTCHA – Sie ergänzen Ihre CaptchaAI-Anfrage um enterprise=1. Ob eine Seite Enterprise nutzt, erkennen Sie an recaptcha/enterprise.js im Quelltext. Entscheidend sind nur das richtige enterprise-Flag und ein passender action-Parameter.
Verwandte Leitfäden
- reCAPTCHA v2 Callback per API lösen
- reCAPTCHA v2 und Turnstile auf derselben Seite
- reCAPTCHA v3 Enterprise per API lösen