Jak ominąć Cloudflare Turnstile za pomocą Pythona#

logoNextCaptcha
March 26,2026

Czym jest Cloudflare Turnstile?#

Cloudflare Turnstile to inteligentna alternatywa dla CAPTCHA, zaprojektowana do weryfikacji użytkowników bez uciążliwych wyzwań. W przeciwieństwie do tradycyjnych CAPTCHA wymagających wyboru obrazów lub wpisywania tekstu, Turnstile uruchamia niewidoczne testy przeglądarki, aby określić, czy odwiedzający jest człowiekiem. Jest szeroko stosowany na stronach korzystających z usług Cloudflare i może stanowić poważną przeszkodę dla web scrapingu i automatyzacji.

Wymagania wstępne#

Przed rozpoczęciem upewnij się, że masz zainstalowany Python 3.7 lub nowszy. Potrzebujesz również klucza API NextCaptcha — zarejestruj się na NextCaptcha, aby otrzymać darmowe kredyty próbne. Następnie zainstaluj NextCaptcha Python SDK:
pip install nextcaptcha-python

Szybki start z NextCaptcha SDK#

Najpierw utwórz instancję NextCaptchaAPI z kluczem API. Klucz klienta znajdziesz w panelu NextCaptcha:
from nextcaptcha import NextCaptchaAPI
 
api = NextCaptchaAPI(client_key="YOUR_CLIENT_KEY")
Następnie wywołaj metodę turnstile z adresem URL strony docelowej i kluczem witryny Turnstile. Klucz znajduje się w atrybucie data-sitekey widżetu Turnstile na stronie docelowej:
result = api.turnstile(
    website_url="https://example.com",
    website_key="0x4XXXXXXXXXXXXXXXXX"
)
 
if result["status"] == "ready":
    token = result["solution"]["token"]
    print(f"Turnstile token: {token}")

Pełny przykład z obsługą błędów#

Oto gotowy do produkcji przykład z obsługą błędów i wsparciem dla zmiennych środowiskowych:
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)

Użycie surowego API (bez SDK)#

Jeśli wolisz nie używać SDK, możesz wywołać API NextCaptcha bezpośrednio za pomocą biblioteki requests. To podejście daje pełną kontrolę nad żądaniami HTTP:
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...")
To podejście wymaga dwóch wywołań API: createTask do przesłania wyzwania Turnstile i getTaskResult do odpytywania o wynik. Zalecany interwał odpytywania to 3 sekundy, aby uniknąć limitów częstotliwości.

Podsumowanie#

W tym przewodniku omówiliśmy dwie metody ominięcia Cloudflare Turnstile za pomocą Pythona: SDK NextCaptcha dla prostego podejścia i surowe API dla pełnej kontroli. NextCaptcha automatycznie rozwiązuje wyzwanie Turnstile i zwraca prawidłowy token. Więcej informacji znajdziesz pod poniższymi linkami: