Vergleiche

Unterschiede zwischen Standard- und Enterprise-Solver reCAPTCHA v2

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

Kommentare sind für diesen Artikel deaktiviert.