Python で Cloudflare Turnstile をバイパスする方法#
Cloudflare Turnstile とは?#
Cloudflare Turnstile は、侵入的なチャレンジなしでユーザーを検証するスマートな CAPTCHA 代替手段です。画像選択やテキスト入力を必要とする従来の CAPTCHA とは異なり、Turnstile は不可視のブラウザチャレンジを実行して訪問者が人間かどうかを判断します。Cloudflare のサービスを利用するウェブサイトで広く採用されており、ウェブスクレイピングや自動化ワークフローにとって大きな障壁となることがあります。
前提条件#
始める前に、Python 3.7 以上がインストールされていることを確認してください。NextCaptcha API キーも必要です。NextCaptcha に登録して無料トライアルクレジットを取得してください。次に NextCaptcha Python SDK をインストールします:
pip install nextcaptcha-python
NextCaptcha SDK でクイックスタート#
まず、API キーを使用して NextCaptchaAPI インスタンスを作成します。クライアントキーは NextCaptcha ダッシュボードで確認できます:
from nextcaptcha import NextCaptchaAPI
api = NextCaptchaAPI(client_key="YOUR_CLIENT_KEY")
次に、ターゲットウェブサイトの URL と Turnstile サイトキーを指定して turnstile メソッドを呼び出します。サイトキーはターゲットページの Turnstile ウィジェットの data-sitekey 属性で確認できます:
result = api.turnstile(
website_url="https://example.com",
website_key="0x4XXXXXXXXXXXXXXXXX"
)
if result["status"] == "ready":
token = result["solution"]["token"]
print(f"Turnstile token: {token}")
エラー処理付きの完全な例#
適切なエラー処理と環境変数サポートを備えた本番環境向けの例を示します:
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)
Raw API の使用(SDK なし)#
SDK を使用せずに、requests ライブラリを使って NextCaptcha API を直接呼び出すこともできます。このアプローチでは 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...")
このアプローチでは 2 回の API 呼び出しが必要です:createTask で Turnstile チャレンジを送信し、getTaskResult で結果をポーリングします。レート制限を避けるために 3 秒のポーリング間隔を推奨します。
まとめ#
このガイドでは、Python で Cloudflare Turnstile をバイパスする 2 つの方法を解説しました:NextCaptcha Python SDK を使用したシンプルな方法と、Raw API を使用した完全制御の方法です。NextCaptcha が Turnstile チャレンジの解決を自動的に処理し、ターゲットウェブサイトに送信できる有効なトークンを返します。詳細は以下のリンクをご覧ください: