Cloudflare Turnstile omzeilen met Python#

logoNextCaptcha
March 26,2026

Wat is Cloudflare Turnstile?#

Cloudflare Turnstile is een slim CAPTCHA-alternatief dat gebruikers verifieert zonder opdringerige uitdagingen. In tegenstelling tot traditionele CAPTCHA's die beeldselectie of tekstinvoer vereisen, voert Turnstile onzichtbare browsertests uit om te bepalen of de bezoeker een mens is. Het wordt breed ingezet op websites die Cloudflare-diensten gebruiken en kan een aanzienlijke hindernis zijn voor webscraping en automatiseringsworkflows.

Vereisten#

Zorg ervoor dat Python 3.7 of hoger is geïnstalleerd voordat je begint. Je hebt ook een NextCaptcha API-sleutel nodig — meld je aan bij NextCaptcha voor gratis proeftegoed. Installeer vervolgens de NextCaptcha Python SDK:
pip install nextcaptcha-python

Snel starten met de NextCaptcha SDK#

Maak eerst een NextCaptchaAPI-instantie aan met je API-sleutel. Je clientsleutel vind je in het NextCaptcha-dashboard:
from nextcaptcha import NextCaptchaAPI
 
api = NextCaptchaAPI(client_key="YOUR_CLIENT_KEY")
Roep vervolgens de turnstile-methode aan met de doel-URL en de Turnstile-sitesleutel. De sleutel staat in het data-sitekey-attribuut van de Turnstile-widget op de doelpagina:
result = api.turnstile(
    website_url="https://example.com",
    website_key="0x4XXXXXXXXXXXXXXXXX"
)
 
if result["status"] == "ready":
    token = result["solution"]["token"]
    print(f"Turnstile token: {token}")

Volledig voorbeeld met foutafhandeling#

Hier is een productieklaar voorbeeld met foutafhandeling en ondersteuning voor omgevingsvariabelen:
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)

Directe API-aanroep (zonder SDK)#

Als je de SDK niet wilt gebruiken, kun je de NextCaptcha API rechtstreeks aanroepen met de requests-bibliotheek. Deze aanpak geeft je volledige controle over de HTTP-verzoeken:
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...")
Deze aanpak vereist twee API-aanroepen: createTask om de Turnstile-uitdaging in te dienen, en getTaskResult om het resultaat op te vragen. Een polling-interval van 3 seconden wordt aanbevolen om snelheidslimieten te vermijden.

Samenvatting#

In deze handleiding hebben we twee methoden behandeld om Cloudflare Turnstile te omzeilen met Python: de NextCaptcha SDK voor een eenvoudige aanpak, en de directe API voor volledige controle. NextCaptcha lost de Turnstile-uitdaging automatisch op en retourneert een geldig token. Bekijk de onderstaande links voor meer informatie: