Vergleiche

Standard vs. Enterprise reCAPTCHA v3 Lösungsleitfaden

Beide Versionen laufen unsichtbar und geben einen Risiko-Score (0,0 bis 1,0) zurück. Enterprise fügt Ursachencodes, adaptive Schwellenwerte und Google Cloud-Projektmanagement hinzu – aber aus Sicht der CaptchaAI-Lösung ist der einzige Parameterunterschied enterprise=1. Die Herausforderung besteht darin, herauszufinden, welche Version eine Website verwendet, da beide unsichtbar sind.


Funktionsvergleich

Funktion Standard v3 Enterprise v3
Unsichtbare Operation Ja Ja
Punktzahl (0,0–1,0) Ja Ja
Aktionsparameter Erforderlich Erforderlich
JS-Datei api.js?render=KEY enterprise.js?render=KEY
Funktion ausführen grecaptcha.execute() grecaptcha.enterprise.execute()
Ursachencodes Nein Ja (AUTOMATION, TOO_MUCH_TRAFFIC usw.)
Benutzerdefinierte Schwellenwerte pro Aktion Nein Ja (über Cloud Console)
Erkennung von Passwortlecks Nein Ja
Kontoverteidiger Nein Ja
Verifizierungsendpunkt siteverify (kostenlos) recaptchaenterprise.googleapis.com (bezahlt)
CaptchaAI-Parameter version=v3 version=v3 + enterprise=1
Typische Lösungszeit 10-20 Sekunden 10-20 Sekunden

So erkennen Sie, welche Version eine Site verwendet

Da beide Versionen unsichtbar sind (kein sichtbares Widget), muss die Erkennung auf JavaScript basieren:

Python-Erkennung:

import requests
import re

def detect_v3_type(url):
    resp = requests.get(url)
    html = resp.text

    # Check for enterprise.js
    if "enterprise.js" in html:
        version = "enterprise_v3"
        execute_fn = "grecaptcha.enterprise.execute"
    elif "recaptcha/api.js" in html and "render=" in html:
        version = "standard_v3"
        execute_fn = "grecaptcha.execute"
    else:
        return None

    # Extract sitekey from render parameter
    key_match = re.search(r'render[=:]\s*["\']?([A-Za-z0-9_-]{40})', html)
    sitekey = key_match.group(1) if key_match else None

    # Extract action parameter
    action_match = re.search(r'action["\']?\s*[:=]\s*["\'](\w+)', html)
    action = action_match.group(1) if action_match else "unknown"

    return {
        "version": version,
        "sitekey": sitekey,
        "action": action,
        "execute_fn": execute_fn
    }

info = detect_v3_type("https://example.com/login")
print(info)

Node.js-Erkennung:

const axios = require("axios");

async function detectV3Type(url) {
  const { data: html } = await axios.get(url);

  let version, executeFn;
  if (html.includes("enterprise.js")) {
    version = "enterprise_v3";
    executeFn = "grecaptcha.enterprise.execute";
  } else if (html.includes("recaptcha/api.js") && html.includes("render=")) {
    version = "standard_v3";
    executeFn = "grecaptcha.execute";
  } else {
    return null;
  }

  const keyMatch = html.match(/render[=:]\s*['"]?([A-Za-z0-9_-]{40})/);
  const actionMatch = html.match(/action['"]?\s*[:=]\s*['"](\w+)/);

  return {
    version,
    sitekey: keyMatch?.[1] || null,
    action: actionMatch?.[1] || "unknown",
    executeFn,
  };
}

Schnellcheck der Browserkonsole:

// Paste in DevTools console
if (document.querySelector('script[src*="enterprise.js"]')) {
  console.log("Enterprise v3");
  console.log("Execute:", typeof grecaptcha?.enterprise?.execute);
} else if (document.querySelector('script[src*="api.js"][src*="render="]')) {
  console.log("Standard v3");
  console.log("Execute:", typeof grecaptcha?.execute);
}

Lösung mit CaptchaAI

Standard v3

import requests
import time

# Submit
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "version": "v3",
    "googlekey": sitekey,
    "action": "login",
    "pageurl": page_url
})
task_id = resp.text.split("|")[1]

# Poll
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

Enterprise v3

import requests
import time

# Submit — add enterprise=1
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "version": "v3",
    "enterprise": 1,  # Required for Enterprise
    "googlekey": sitekey,
    "action": "login",
    "pageurl": page_url
})
task_id = resp.text.split("|")[1]

# Polling is identical to standard
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
import re

class RecaptchaV3Solver:
    def __init__(self, api_key):
        self.api_key = api_key

    def detect_and_solve(self, page_url, action=None):
        """Auto-detect standard vs enterprise and solve."""
        html = requests.get(page_url).text

        is_enterprise = "enterprise.js" in html
        key_match = re.search(r'render[=:]\s*["\']?([A-Za-z0-9_-]{40})', html)
        if not key_match:
            raise Exception("No v3 sitekey found")
        sitekey = key_match.group(1)

        if not action:
            action_match = re.search(r'action["\']?\s*[:=]\s*["\'](\w+)', html)
            action = action_match.group(1) if action_match else "verify"

        params = {
            "key": self.api_key,
            "method": "userrecaptcha",
            "version": "v3",
            "googlekey": sitekey,
            "action": action,
            "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 result.text.split("|")[1]
            if result.text != "CAPCHA_NOT_READY":
                raise Exception(f"Solve failed: {result.text}")

        raise Exception("Timed out")

solver = RecaptchaV3Solver("YOUR_API_KEY")
token = solver.detect_and_solve("https://example.com/login", action="login")
print(f"Token: {token[:40]}...")

Häufige Fehler

Fehler Ergebnis Beheben
Verwendung von enterprise=1 auf Standard v3 Token ist möglicherweise ungültig Suchen Sie nach enterprise.js, bevor Sie das Flag hinzufügen
Weglassen von enterprise=1 auf Enterprise v3 Token vom Backend abgelehnt Immer hinzufügen, wenn enterprise.js vorhanden ist
Falscher action-Parameter Niedrige Punktzahl, Token abgelehnt Extrahieren Sie die genaue Aktionszeichenfolge aus dem Seiten-JavaScript
Weglassen von version=v3 Solver behandelt es als v2 Geben Sie für punktebasiertes reCAPTCHA immer version=v3 an
Verwenden von v2-Sitekey für v3-Lösung ERROR_WRONG_GOOGLEKEY v3-Sitekeys stammen vom Parameter render=KEY

Extrahieren des Aktionsparameters

Der Parameter action ist für Version 3 von entscheidender Bedeutung – sowohl für Standard als auch für Unternehmen. Wenn Sie die falsche Aktion senden, ist die Punktzahl niedrig und der Token wird möglicherweise abgelehnt.

import re

def find_v3_actions(html):
    """Extract all action parameters from page JavaScript."""
    # Look for grecaptcha.execute(key, {action: '...'})
    pattern = r"(?:grecaptcha\.(?:enterprise\.)?execute|action)\s*[(:]\s*['\"](\w+)"
    actions = re.findall(pattern, html)
    return list(set(actions))

# Common actions: "login", "submit", "register", "checkout", "homepage"

Token-Injektion

Gleicher Ansatz für beide Versionen:

# For browser-based workflows (Selenium)
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)

# For pure HTTP workflows
requests.post(page_url, data={
    "g-recaptcha-response": token,
    "username": "user",
    "password": "pass"
})
// Puppeteer
await page.evaluate((tok) => {
  document.getElementById("g-recaptcha-response").value = tok;
}, token);

// Pure HTTP (axios)
await axios.post(pageUrl, new URLSearchParams({
  "g-recaptcha-response": token,
  username: "user",
  password: "pass",
}));

FAQ

Gibt Enterprise v3 unterschiedliche Bewertungen?

Das Bewertungsmodell ist ähnlich, Enterprise kann jedoch zusätzliche Signale und benutzerdefinierte Schwellenwerte verwenden. CaptchaAI behandelt beide identisch – das zurückgegebene Token funktioniert unabhängig davon, welches Modell Google verwendet.

Wie erkenne ich Enterprise v3 auf einer Seite?

Suchen Sie im Skript-Tag nach enterprise.js anstelle von api.js und im JavaScript nach grecaptcha.enterprise.execute(). Beide sind unsichtbar, sodass optisch kein Unterschied besteht.

Ist die Lösung von Enterprise v3 teurer?

Überprüfen Sie die aktuellen Preise von CaptchaAI. Enterprise-Lösungen haben möglicherweise einen anderen Preis, aber der Aufwand für die API-Integration ist identisch mit dem Standard.

Was passiert, wenn ich den Aktionsparameter nicht finden kann?

Probieren Sie gängige Werte aus: "verify", "submit", "homepage", "login". Wenn das Token immer noch abgelehnt wird, verwenden Sie die DevTools des Browsers, um in den Seitenskripten nach execute( zu suchen und die genaue Aktionszeichenfolge zu finden.

Kann eine Site ohne Vorankündigung zwischen Standard und Enterprise wechseln?

Ja. Websites können jederzeit zu Enterprise migrieren. Erstellen Sie Ihre Erkennung so, dass sie bei jedem Seitenladevorgang ausgeführt wird, anstatt die Version fest zu codieren.


Verwandte Leitfäden

FAQ

Führt die Verwendung des falschen Enterprise-Flags zu Fehlern?

Oft ja. Websites, die Enterprise-Token verwenden, überprüfen die Enterprise-API, die Enterprise-Tokens erwartet. Bei Standard-Tokens kann die Verifizierung fehlschlagen und umgekehrt.

Wie erkenne ich Enterprise v3 programmgesteuert?

Durchsuchen Sie die Seitenquelle nach enterprise.js:

page_source = driver.page_source
is_enterprise = "enterprise.js" in page_source

Gibt es einen Leistungsunterschied?

Nein. Lösungszeit und Erfolgsquote sind bei beiden Versionen ähnlich.


Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.