Tutorials

Cloudflare Turnstile Sitekey-Extraktion und -Lösung

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:

  1. Das data-sitekey-Attribut für .cf-turnstile-Elemente
  2. Der JavaScript-Aufruf turnstile.render()
  3. 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
Kommentare sind für diesen Artikel deaktiviert.