Cloudflare Turnstile ist die am schnellsten wachsende CAPTCHA-Alternative. Um es mit CaptchaAI zu lösen, benötigen Sie den Sitekey und die Seiten-URL. Dieser Leitfaden behandelt alle Möglichkeiten, den Sitekey zu finden – von einfachen DOM-Abfragen bis zum Abfangen von JavaScript-Renderaufrufen.
Wo Turnstile Sitekeys leben
Standortschlüssel für Drehkreuze erscheinen an drei Stellen:
- Das
data-sitekey-Attribut für.cf-turnstile-Elemente - Der JavaScript-Aufruf
turnstile.render() - Die Turnstile-Iframe-URL
src
Methode 1: DOM-Attribut
// Browser console
document.querySelectorAll('.cf-turnstile').forEach((el, i) => {
console.log(`Turnstile ${i}:`, {
sitekey: el.getAttribute('data-sitekey'),
action: el.getAttribute('data-action'),
cData: el.getAttribute('data-cdata'),
theme: el.getAttribute('data-theme'),
});
});
Python (statisches HTML)
import re
import requests
html = requests.get("https://example.com/login").text
matches = re.findall(
r'class=["\'][^"\']*cf-turnstile[^"\']*["\'][^>]*data-sitekey=["\']([^"\']+)',
html
)
for sk in matches:
print(f"Sitekey: {sk}")
Python (Selen)
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com/login")
widgets = driver.find_elements(By.CSS_SELECTOR, ".cf-turnstile")
for w in widgets:
sitekey = w.get_attribute("data-sitekey")
action = w.get_attribute("data-action")
print(f"Sitekey: {sitekey}, Action: {action}")
Methode 2: JavaScript-Renderaufruf
Einige Websites rendern Turnstile programmgesteuert:
turnstile.render('#captcha-container', {
sitekey: '0x4AAAAAAAB...',
callback: function(token) {
document.getElementById('cf-token').value = token;
},
});
Auszug aus der Seitenquelle:
# Find turnstile.render calls
render_match = re.search(
r'turnstile\.render\s*\([^,]*,\s*\{([^}]+)\}',
html
)
if render_match:
config = render_match.group(1)
sk = re.search(r'sitekey\s*:\s*["\']([^"\']+)', config)
if sk:
print(f"Sitekey from render: {sk.group(1)}")
Abfangen durch Puppenspieler
// Intercept turnstile.render before page loads
await page.evaluateOnNewDocument(() => {
window.__turnstileParams = [];
const origRender = window.turnstile?.render;
Object.defineProperty(window, 'turnstile', {
set(val) {
this._turnstile = val;
const orig = val.render;
val.render = function(container, params) {
window.__turnstileParams.push(params);
console.log('Turnstile render:', JSON.stringify(params));
return orig.apply(this, arguments);
};
},
get() { return this._turnstile; }
});
});
await page.goto('https://example.com/login', { waitUntil: 'networkidle2' });
const params = await page.evaluate(() => window.__turnstileParams);
console.log('Captured Turnstile params:', params);
Methode 3: Iframe src
Turnstile rendert einen Iframe. Der Sitekey befindet sich in seinem src:
document.querySelectorAll('iframe').forEach(iframe => {
if (iframe.src.includes('challenges.cloudflare.com')) {
console.log('Turnstile iframe:', iframe.src);
const match = iframe.src.match(/sitekey=([A-Za-z0-9_-]+)/);
if (match) console.log('Sitekey:', match[1]);
}
});
Drehkreuz mit CaptchaAI lösen
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
SITEKEY = "0x4AAAAAAAB..."
PAGE_URL = "https://example.com/login"
# Submit
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": SITEKEY,
"pageurl": PAGE_URL,
"json": "1",
}).json()
if resp["status"] != 1:
raise Exception(f"Submit error: {resp['request']}")
task_id = resp["request"]
# Poll
for _ in range(24):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": "1"
}).json()
if result["status"] == 1:
token = result["request"]
print(f"Turnstile token: {token[:50]}...")
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result['request']}")
JavaScript
const axios = require('axios');
const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: 'YOUR_API_KEY',
method: 'turnstile',
sitekey: '0x4AAAAAAAB...',
pageurl: 'https://example.com/login',
json: 1,
}
});
const taskId = submit.data.request;
// Poll for result
let token = null;
for (let i = 0; i < 24; i++) {
await new Promise(r => setTimeout(r, 5000));
const poll = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (poll.data.status === 1) {
token = poll.data.request;
break;
}
}
console.log(`Token: ${token.substring(0, 50)}...`);
Token-Injektion
Turnstile speichert seinen Token in einem versteckten Eingang namens cf-turnstile-response:
# Selenium
driver.execute_script("""
const input = document.querySelector('input[name="cf-turnstile-response"]');
if (input) input.value = arguments[0];
// Also set in the Turnstile widget's callback
const widget = document.querySelector('.cf-turnstile');
const callbackName = widget?.getAttribute('data-callback');
if (callbackName && typeof window[callbackName] === 'function') {
window[callbackName](arguments[0]);
}
""", token)
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
Kein .cf-turnstile-Element gefunden |
Dynamisch gerendert | Warten Sie, bis die Seite geladen ist, oder verwenden Sie MutationObserver |
| Sitekey leer | Wird über die JavaScript-API festgelegt | Suchen Sie in Skripten nach turnstile.render |
| Token abgelehnt | Falscher Sitekey oder falsche Seiten-URL | Überprüfen Sie noch einmal, ob beide Werte mit der Zielsite übereinstimmen |
method-Parameter falsch |
Verwendung von userrecaptcha für Drehkreuz |
Verwenden Sie method=turnstile |
FAQ
Ist Turnstile schwieriger zu lösen als reCAPTCHA?
Nein. CaptchaAI übernimmt beides. Das Drehkreuz löst sich normalerweise in 10–25 Sekunden auf, vergleichbar mit reCAPTCHA v2.
Verfügt Turnstile über einen unsichtbaren Modus?
Turnstile verfügt über die Modi „verwaltet“ und „nicht interaktiv“, in denen kein sichtbares Widget angezeigt wird. Die Sitekey-Extraktionsmethoden funktionieren genauso.
Lösen Sie Cloudflare Turnstile CAPTCHAs mit CaptchaAI
Holen Sie sich Ihren API-Schlüssel unter captchaai.com.
Verwandte Leitfäden
- reCAPTCHA-Parameter aus Seitenquellcode extrahieren
- BLS-CAPTCHA Parameter-Deep-Dive
- Cloudflare Turnstile vs. reCAPTCHA