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