Beide Versionen bieten die gleichen Herausforderungen für das Kontrollkästchen „Ich bin kein Roboter“ und das gleiche Bildraster. Der Unterschied liegt im Backend: Enterprise fügt Ursachencodes, benutzerdefinierte Regeln und Google Cloud-Integration hinzu. Zur Lösung besteht die einzige Änderung darin, enterprise=1 zu Ihrer CaptchaAI-Anfrage hinzuzufügen – aber die Erkennung, welche Version eine Site verwendet, ist der Teil, den Entwickler am häufigsten falsch machen.
Funktionsvergleich
| Funktion | Standard v2 | Unternehmen v2 |
|---|---|---|
| Kontrollkästchen-Widget | Ja – identisches Aussehen | Ja – identisches Aussehen |
| Image-Herausforderungen | 3×3 oder 4×4 Gitter | 3×3 oder 4×4 Gitter |
| JS-Datei | api.js |
enterprise.js |
| Funktion ausführen | grecaptcha.execute() |
grecaptcha.enterprise.execute() |
| Verifizierungs-API | siteverify (kostenlos) |
recaptchaenterprise.googleapis.com (bezahlt) |
| Ursachencodes | Nein | Ja (AUTOMATION, TOO_MUCH_TRAFFIC usw.) |
| Benutzerdefinierte Regeln | Nein | Ja (Grenzwerte pro Aktion) |
| Google Cloud Console | Nein | Ja (projektbasiertes Management) |
| Erkennung von Passwortlecks | Nein | Ja |
| Token-Format | Gleiche Struktur | Gleiche Struktur |
| CaptchaAI-Parameter | — | enterprise=1 |
| Typische Lösungszeit | 10-30 Sekunden | 10-30 Sekunden |
So erkennen Sie Enterprise v2
Der Hauptunterschied besteht darin, welche JavaScript-Datei die Seite lädt:
Überprüfen Sie das Skript-Tag:
<!-- Standard v2 -->
<script src="https://www.google.com/recaptcha/api.js"></script>
<!-- Enterprise v2 -->
<script src="https://www.google.com/recaptcha/enterprise.js"></script>
Automatisierte Erkennung (Python):
import requests
from bs4 import BeautifulSoup
def detect_recaptcha_version(url):
resp = requests.get(url)
soup = BeautifulSoup(resp.text, "html.parser")
enterprise_script = soup.find("script", src=lambda s: s and "enterprise.js" in s)
standard_script = soup.find("script", src=lambda s: s and "recaptcha/api.js" in s)
widget = soup.find(class_="g-recaptcha")
sitekey = widget["data-sitekey"] if widget else None
if enterprise_script:
return {"version": "enterprise_v2", "sitekey": sitekey}
elif standard_script:
return {"version": "standard_v2", "sitekey": sitekey}
return None
info = detect_recaptcha_version("https://example.com/login")
print(info)
Automatisierte Erkennung (Node.js):
const axios = require("axios");
const cheerio = require("cheerio");
async function detectRecaptchaVersion(url) {
const { data } = await axios.get(url);
const $ = cheerio.load(data);
const hasEnterprise = $('script[src*="enterprise.js"]').length > 0;
const hasStandard = $('script[src*="recaptcha/api.js"]').length > 0;
const sitekey = $(".g-recaptcha").attr("data-sitekey");
if (hasEnterprise) return { version: "enterprise_v2", sitekey };
if (hasStandard) return { version: "standard_v2", sitekey };
return null;
}
Überprüfung der Browserkonsole:
// Quick check in DevTools
if (document.querySelector('script[src*="enterprise.js"]')) {
console.log("Enterprise v2");
} else if (document.querySelector('script[src*="recaptcha/api.js"]')) {
console.log("Standard v2");
}
Lösung mit CaptchaAI
Standard v2
import requests
import time
# Submit task
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url
})
task_id = resp.text.split("|")[1]
# Poll for token
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY", "action": "get", "id": task_id
})
if result.text.startswith("OK|"):
token = result.text.split("|")[1]
break
Unternehmen v2
import requests
import time
# Submit task — only difference is enterprise=1
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"enterprise": 1 # Required for Enterprise
})
task_id = resp.text.split("|")[1]
# Polling is identical
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY", "action": "get", "id": task_id
})
if result.text.startswith("OK|"):
token = result.text.split("|")[1]
break
Universeller Löser mit automatischer Erkennung
import requests
import time
from bs4 import BeautifulSoup
class RecaptchaV2Solver:
def __init__(self, api_key):
self.api_key = api_key
def detect_and_solve(self, page_url, page_html=None):
if not page_html:
page_html = requests.get(page_url).text
soup = BeautifulSoup(page_html, "html.parser")
is_enterprise = bool(soup.find("script", src=lambda s: s and "enterprise.js" in s))
widget = soup.find(class_="g-recaptcha")
sitekey = widget["data-sitekey"] if widget else None
if not sitekey:
raise Exception("No reCAPTCHA sitekey found on page")
params = {
"key": self.api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url
}
if is_enterprise:
params["enterprise"] = 1
resp = requests.get("https://ocr.captchaai.com/in.php", params=params)
if not resp.text.startswith("OK|"):
raise Exception(f"Submit failed: {resp.text}")
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": self.api_key, "action": "get", "id": task_id
})
if result.text.startswith("OK|"):
return {
"token": result.text.split("|")[1],
"is_enterprise": is_enterprise,
"sitekey": sitekey
}
if result.text != "CAPCHA_NOT_READY":
raise Exception(f"Solve failed: {result.text}")
raise Exception("Solve timed out")
solver = RecaptchaV2Solver("YOUR_API_KEY")
result = solver.detect_and_solve("https://example.com/login")
print(f"Enterprise: {result['is_enterprise']}, Token: {result['token'][:40]}...")
Häufige Fehler
| Fehler | Was passiert | Beheben |
|---|---|---|
Verwendung von enterprise=1 auf Standard v2 |
Kann ungültige Token zurückgeben | Suchen Sie nach enterprise.js, bevor Sie das Flag hinzufügen |
Weglassen von enterprise=1 auf Enterprise v2 |
Token kann vom Site-Backend abgelehnt werden | Fügen Sie immer enterprise=1 hinzu, wenn enterprise.js vorhanden ist |
| Falschen Sitekey verwenden | ERROR_WRONG_GOOGLEKEY |
Auszug aus data-sitekey für das .g-recaptcha-Element |
| Verwechslung von v2 Enterprise mit v3 Enterprise | Falsche Lösungsparameter | v2 hat ein Kontrollkästchen; v3 ist mit Score unsichtbar |
Token-Injektion – für beide gleich
# Selenium injection — works for both standard and enterprise
driver.execute_script(
f'document.getElementById("g-recaptcha-response").value = "{token}";'
)
# If the page uses a callback function
callback = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-callback")
if callback:
driver.execute_script(f'{callback}("{token}");')
// Puppeteer injection — works for both
await page.evaluate((token) => {
document.getElementById("g-recaptcha-response").value = token;
// Find and call callback if present
const widget = document.querySelector(".g-recaptcha");
const cb = widget?.getAttribute("data-callback");
if (cb && typeof window[cb] === "function") {
window[cb](token);
}
}, token);
FAQ
Ist Enterprise v2 schwieriger zu lösen?
Nein. Die Herausforderungsmechanismen sind identisch – dasselbe Kontrollkästchen, dieselben Bildraster. Enterprise fügt Backend-Analysen hinzu (Ursachencodes, benutzerdefinierte Schwellenwerte), ändert jedoch nichts an der Herausforderungsschwierigkeit für den Löser.
Kann ich für beide Versionen den gleichen Code verwenden?
Fast. Der einzige Parameterunterschied ist enterprise=1. Verwenden Sie den oben genannten Ansatz der automatischen Erkennung, um eine Codebasis zu erstellen, die beides verarbeitet. Erkennung, Abfrage und Token-Injektion sind identisch.
Muss ich Enterprise-Ursachencodes verarbeiten?
Nein. Begründungscodes werden von Google während der Überprüfung an das Backend der Website zurückgegeben. Sie sind für den CAPTCHA-Löser unsichtbar. Ihre CaptchaAI-Integration erfordert keine Änderungen für Ursachencodes.
Kostet die Lösung von Enterprise v2 mehr?
Sehen Sie sich die aktuelle Preisseite von CaptchaAI an. Enterprise-Lösungen haben möglicherweise unterschiedliche Preise, der Aufwand für die API-Integration ist jedoch derselbe.
Woher weiß ich, ob die Erkennung korrekt funktioniert hat?
Wenn Sie enterprise=1 für eine Standard-Site senden, ist die Lösung möglicherweise erfolgreich, das Token wird jedoch möglicherweise von der Ziel-Site abgelehnt. Wenn Sie es für eine Enterprise-Site weglassen, kann dasselbe passieren. Überprüfen Sie immer zuerst die Skript-URL, um dies zu überprüfen.
Verwandte Leitfäden
- reCAPTCHA Enterprise vs. Standard – Vollständiger Leitfaden— Vollständiger Vergleich aller Versionen
- So lösen Sie reCAPTCHA v2 mithilfe der API
- So lösen Sie reCAPTCHA v2 Enterprise mithilfe der API
- So identifizieren Sie die reCAPTCHA Enterprise-Implementierung— Erkennung tiefer Tauchgang
- So identifizieren Sie die reCAPTCHA Enterprise-Implementierung