Tutorials

Extrahieren von reCAPTCHA-Parametern aus der Seitenquelle

Jede reCAPTCHA-Lösung über CaptchaAI erfordert den richtigen Sitekey und die richtige Seiten-URL. Einige CAPTCHA-Typen benötigen außerdem zusätzliche Parameter – Aktion (v3), Daten (Google Sites) oder Unternehmenskennzeichen. In diesem Leitfaden wird jede Extraktionsmethode behandelt.


Parameter nach reCAPTCHA-Version

Parameter v2-Standard v2 Unsichtbar v3 Unternehmen
googlekey (Sitekey) Erforderlich Erforderlich Erforderlich Erforderlich
pageurl Erforderlich Erforderlich Erforderlich Erforderlich
invisible 1
action Erforderlich Manchmal
data-s Manchmal Manchmal
enterprise 1

Methode 1: HTML-Attributextraktion

Aus dem data-sitekey-Attribut

import re
import requests

url = "https://example.com/login"
html = requests.get(url).text

# Find data-sitekey
match = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)["\']', html)
if match:
    sitekey = match.group(1)
    print(f"Sitekey: {sitekey}")

# Check if invisible
invisible_match = re.search(r'data-size=["\']invisible["\']', html)
is_invisible = bool(invisible_match)
print(f"Invisible: {is_invisible}")

# Find callback
callback_match = re.search(r'data-callback=["\'](\w+)["\']', html)
callback = callback_match.group(1) if callback_match else None
print(f"Callback: {callback}")

# Check for data-s (Google-owned sites)
data_s_match = re.search(r'data-s=["\']([^"\']+)["\']', html)
data_s = data_s_match.group(1) if data_s_match else None
print(f"data-s: {data_s}")

JavaScript (Puppenspieler)

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com/login', { waitUntil: 'networkidle2' });

const params = await page.evaluate(() => {
  const widget = document.querySelector('.g-recaptcha');
  if (!widget) return null;

  return {
    sitekey: widget.getAttribute('data-sitekey'),
    size: widget.getAttribute('data-size'),
    callback: widget.getAttribute('data-callback'),
    dataS: widget.getAttribute('data-s'),
    invisible: widget.getAttribute('data-size') === 'invisible',
  };
});

console.log(params);

Methode 2: Skript-Tag-Extraktion

reCAPTCHA v3 und Enterprise-Sitekeys

v3-Sitekeys sind in die Skript-URL eingebettet:

# Find sitekey from script src
v3_match = re.search(
    r'recaptcha/(?:api|enterprise)\.js\?.*?render=([A-Za-z0-9_-]+)',
    html
)
if v3_match:
    sitekey = v3_match.group(1)
    print(f"v3 Sitekey: {sitekey}")

# Check enterprise
is_enterprise = 'enterprise.js' in html
print(f"Enterprise: {is_enterprise}")

Finden des Aktionsparameters

Die Aktion wird im JavaScript-Code übergeben, nicht in HTML-Attributen:

# Search for grecaptcha.execute calls
action_match = re.search(
    r'grecaptcha\.execute\s*\([^,]+,\s*\{[^}]*action\s*:\s*["\']([^"\']+)',
    html
)
if action_match:
    action = action_match.group(1)
    print(f"Action: {action}")

Methode 3: Iframe-Quellenextraktion

Wenn reCAPTCHA in einem Iframe gerendert wird:

# Find reCAPTCHA iframe
iframe_match = re.search(
    r'<iframe[^>]+src=["\']([^"\']*recaptcha/api2/anchor[^"\']*)["\']',
    html
)
if iframe_match:
    iframe_src = iframe_match.group(1)
    sitekey_match = re.search(r'k=([A-Za-z0-9_-]+)', iframe_src)
    if sitekey_match:
        sitekey = sitekey_match.group(1)
        print(f"Iframe sitekey: {sitekey}")

Methode 4: JavaScript-Rendering-Extraktion

Für Seiten, die reCAPTCHA dynamisch mit grecaptcha.render() rendern:

# Find grecaptcha.render calls
render_match = re.search(
    r'grecaptcha\.render\s*\([^,]*,\s*\{([^}]+)\}',
    html
)
if render_match:
    config = render_match.group(1)
    sk = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', config)
    cb = re.search(r'callback\s*:\s*["\']?(\w+)', config)
    sz = re.search(r'size\s*:\s*["\'](\w+)', config)
    print(f"Sitekey: {sk.group(1) if sk else 'not found'}")
    print(f"Callback: {cb.group(1) if cb else 'not found'}")
    print(f"Size: {sz.group(1) if sz else 'not found'}")

Vollständige Extraktionsfunktion

import re
import requests

def extract_recaptcha_params(url):
    html = requests.get(url, timeout=15).text
    params = {"pageurl": url}

    # Sitekey from data-sitekey
    sk = re.search(r'data-sitekey=["\']([A-Za-z0-9_-]+)', html)
    if sk:
        params["sitekey"] = sk.group(1)

    # Sitekey from script render parameter (v3)
    if "sitekey" not in params:
        v3 = re.search(r'render=([A-Za-z0-9_-]{20,})', html)
        if v3:
            params["sitekey"] = v3.group(1)

    # Sitekey from iframe
    if "sitekey" not in params:
        iframe = re.search(r'recaptcha.*?k=([A-Za-z0-9_-]+)', html)
        if iframe:
            params["sitekey"] = iframe.group(1)

    # Sitekey from grecaptcha.render
    if "sitekey" not in params:
        render = re.search(r'sitekey\s*:\s*["\']([A-Za-z0-9_-]+)', html)
        if render:
            params["sitekey"] = render.group(1)

    # Version detection
    if re.search(r'data-size=["\']invisible', html):
        params["invisible"] = True
    if 'enterprise.js' in html:
        params["enterprise"] = True

    # Action (v3)
    action = re.search(
        r'action\s*:\s*["\']([^"\']+)',
        html[html.find('grecaptcha.execute'):] if 'grecaptcha.execute' in html else ''
    )
    if action:
        params["action"] = action.group(1)

    # data-s
    ds = re.search(r'data-s=["\']([^"\']+)', html)
    if ds:
        params["data_s"] = ds.group(1)

    # Callback
    cb = re.search(r'data-callback=["\'](\w+)', html)
    if cb:
        params["callback"] = cb.group(1)

    return params

# Usage
params = extract_recaptcha_params("https://example.com/login")
for k, v in params.items():
    print(f"  {k}: {v}")

Erwartete Ausgabe:

  pageurl: https://example.com/login
  sitekey: 6Le-SITEKEY-abc123
  invisible: True
  callback: onCaptchaComplete

Übermittlung extrahierter Parameter an CaptchaAI

data = {
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": params["sitekey"],
    "pageurl": params["pageurl"],
    "json": "1",
}

if params.get("invisible"):
    data["invisible"] = "1"
if params.get("enterprise"):
    data["enterprise"] = "1"
if params.get("action"):
    data["action"] = params["action"]
if params.get("data_s"):
    data["data-s"] = params["data_s"]

resp = requests.post("https://ocr.captchaai.com/in.php", data=data).json()

Fehlerbehebung

Problem Ursache Lösung
Kein Sitekey gefunden Die Seite verwendet dynamisches Rendering Verwenden Sie Puppeteer/Selenium anstelle von statischem HTML
Falscher Sitekey Mehrere reCAPTCHA-Instanzen Überprüfen Sie, welches Widget dem von Ihnen übermittelten Formular zugeordnet ist
Aktion nicht gefunden Definiert in einer externen JS-Datei Verknüpfte JavaScript-Dateien abrufen und durchsuchen
data-s ändert sich pro Anfrage Google generiert es neu Extrahieren Sie für jede Lösung frisches data-s

FAQ

Kann ich Parameter extrahieren, ohne die Seite in einem Browser zu laden?

Ja, für die meisten Websites befindet sich der Sitekey in der HTML-Quelle. Mit JavaScript gerenderte CAPTCHAs erfordern jedoch einen Browser oder einen Headless-Browser.

Ist der Sitekey derselbe wie der API-Schlüssel?

Nein. Der Sitekey ist ein öffentlicher Schlüssel, der der Website zugewiesen ist. Die Weitergabe ist sicher und in der Seitenquelle sichtbar.


Verwenden Sie extrahierte Parameter mit CaptchaAI für eine zuverlässige Lösung

Holen Sie sich Ihren API-Schlüssel unter captchaai.com.


Verwandte Leitfäden

  • CAPTCHA-Parameter mit Browser-DevTools extrahieren
  • reCAPTCHA v2-Rückrufmechanismus
  • reCAPTCHA v2 Unsichtbar: Triggererkennung
Kommentare sind für diesen Artikel deaktiviert.