Cloudflare Turnstile mit Python umgehen#

logoNextCaptcha
March 26,2026

Was ist Cloudflare Turnstile?#

Cloudflare Turnstile ist eine intelligente CAPTCHA-Alternative, die Benutzer ohne aufdringliche Herausforderungen verifiziert. Im Gegensatz zu herkömmlichen CAPTCHAs führt Turnstile unsichtbare Browser-Challenges durch, um festzustellen, ob der Besucher ein Mensch ist. Es wird häufig von Websites verwendet, die Cloudflare-Dienste nutzen, und kann ein erhebliches Hindernis für Web Scraping und Automatisierung sein.

Voraussetzungen#

Stellen Sie sicher, dass Python 3.7 oder höher installiert ist. Sie benötigen auch einen NextCaptcha API-Schlüssel — registrieren Sie sich bei NextCaptcha für kostenlose Testguthaben. Installieren Sie dann das NextCaptcha Python SDK:
pip install nextcaptcha-python

Schnellstart mit dem NextCaptcha SDK#

Erstellen Sie zunächst eine NextCaptchaAPI-Instanz mit Ihrem API-Schlüssel. Ihren Client-Key finden Sie im NextCaptcha-Dashboard:
from nextcaptcha import NextCaptchaAPI
 
api = NextCaptchaAPI(client_key="YOUR_CLIENT_KEY")
Rufen Sie dann die turnstile-Methode mit der Ziel-URL und dem Turnstile-Seitenschlüssel auf. Der Schlüssel befindet sich im data-sitekey-Attribut des Turnstile-Widgets auf der Zielseite:
result = api.turnstile(
    website_url="https://example.com",
    website_key="0x4XXXXXXXXXXXXXXXXX"
)
 
if result["status"] == "ready":
    token = result["solution"]["token"]
    print(f"Turnstile token: {token}")

Vollständiges Beispiel mit Fehlerbehandlung#

Hier ist ein produktionsreifes Beispiel mit Fehlerbehandlung und Umgebungsvariablen-Unterstützung:
import os
import sys
from nextcaptcha import NextCaptchaAPI
 
CLIENT_KEY = os.getenv("NEXTCAPTCHA_KEY", "YOUR_CLIENT_KEY")
WEBSITE_URL = "https://example.com"
WEBSITE_KEY = "0x4XXXXXXXXXXXXXXXXX"
 
api = NextCaptchaAPI(client_key=CLIENT_KEY)
 
try:
    result = api.turnstile(
        website_url=WEBSITE_URL,
        website_key=WEBSITE_KEY
    )
 
    if result["status"] == "ready":
        token = result["solution"]["token"]
        print(f"Turnstile solved successfully!")
        print(f"Token: {token[:50]}...")
    else:
        print(f"Failed to solve: {result.get('errorDescription', 'Unknown error')}")
        sys.exit(1)
 
except Exception as e:
    print(f"Error: {e}")
    sys.exit(1)

Direkte API-Nutzung (ohne SDK)#

Wenn Sie das SDK nicht verwenden möchten, können Sie die NextCaptcha API direkt mit der requests-Bibliothek aufrufen. Dieser Ansatz gibt Ihnen volle Kontrolle über die HTTP-Anfragen:
import requests
import time
 
API_KEY = "YOUR_API_KEY"
WEBSITE_URL = "https://example.com"
WEBSITE_KEY = "0x4XXXXXXXXXXXXXXXXX"
 
# Step 1: Create task
response = requests.post("https://api.nextcaptcha.com/createTask", json={
    "clientKey": API_KEY,
    "task": {
        "type": "TurnstileTaskProxyless",
        "websiteURL": WEBSITE_URL,
        "websiteKey": WEBSITE_KEY
    }
})
 
data = response.json()
if data.get("errorId", 0) != 0:
    print(f"Error creating task: {data.get('errorDescription')}")
    exit()
 
task_id = data["taskId"]
print(f"Task created: {task_id}")
 
# Step 2: Poll for result
while True:
    time.sleep(3)
    result = requests.post("https://api.nextcaptcha.com/getTaskResult", json={
        "clientKey": API_KEY,
        "taskId": task_id
    }).json()
 
    if result["status"] == "ready":
        token = result["solution"]["token"]
        print(f"Solved! Token: {token[:50]}...")
        break
    elif result["status"] == "failed":
        print(f"Failed: {result.get('errorDescription')}")
        break
    else:
        print("Waiting for solution...")
Dieser Ansatz erfordert zwei API-Aufrufe: createTask zum Einreichen der Turnstile-Challenge und getTaskResult zum Abfragen der Lösung. Ein Abfrageintervall von 3 Sekunden wird empfohlen.

Zusammenfassung#

In dieser Anleitung haben wir zwei Methoden zum Umgehen von Cloudflare Turnstile mit Python behandelt: das NextCaptcha Python SDK für einen einfachen Ansatz und die direkte API für volle Kontrolle. NextCaptcha löst die Turnstile-Challenge automatisch und gibt ein gültiges Token zurück. Weitere Details finden Sie unter den folgenden Links: