
Sora Fujimoto
AI Solutions Architect

あなたのAIエージェントは検証画面で完全に停止します。ページは読み込まれますが、エージェントは空の結果を報告します。これは、現在のオープンウェブに接するほぼすべてのAIエージェントが経験する現象です。このガイドでは、AIエージェントがクラウドフレア・ターニスティールでブロックされる理由と、正しい解決方法について説明します。これは、認可されたターゲットに対してエージェントを実行する開発者や自動化エンジニア向けです。原因、動作するコードパス、明確なコンプライアンスの制限について学びます。
AIエージェントは、自らが目標を読み取り、ステップに分解し、ツールを通じてそれらのステップを実行するソフトウェアです。ブラウザはしばしばそのツールの一つです。ChatGPTのエージェントモードやClaudeのコンピュータも同様の仕組みで動作します。
エージェントは論理的に考えることができます。コードを書いたり、ページを要約したり、フォームを埋めたりしますが、自動化ブラウザを通じてブラウズします。そのブラウザは人間のブラウザとはまったく異なります。そして、このギャップが多くの失敗の原因になります。この分野は急速に成長しており、Gartnerは、2026年末までに40%の企業アプリケーションがタスク固有のAIエージェントを含むと予測しています。これは2025年の5%未満からです。より多くのエージェントが存在するほど、同じ壁にぶつかる機会が増えます。
AIエージェントはライブサイトでいくつかの繰り返し可能な方法で失敗します。以下のパターンはほぼすべてのフレームワークで見られます。
これは特定製品のバグではありません。AIエージェントが考えられる能力と、保護されたサイトでできることの間のカテゴリ全体のギャップです。AIエージェントがクラウドフレア・ターニスティールで停止する場合、これらの3つの壁のいずれかにぶつかることが一般的です。
クラウドフレアはウェブの大部分の前で立っています。W3Techsによると、クラウドフレアはすべてのウェブサイトの約5分の1で使用されており、広範囲にわたるブラウズを行うエージェントは常に遭遇します。この会社は数年間、本物のブラウザと自動化ブラウザを区別する方法を学んできました。いくつかのシグナルが一緒に働き、AIエージェントはそれらすべてに失敗する傾向があります。
本物のブラウザは一貫したシグナルのセットを報告します。画面サイズ、フォント、GPU、タイムゾーン、言語がすべて一致します。自動化ブラウザはしばしばギャップや矛盾を報告します。User-AgentがChromeを示している一方で、TLSハンドシェイクはそれと矛盾しています。クラウドフレアはミリ秒単位でその不一致に気付きます。
本物のユーザーはスクロールし、一時停止し、不規則な曲線でマウスを動かします。エージェントはページを読み込み、テキストを即座に抽出します。その速度そのものがアラートになります。クラウドフレアのターニスティールは、ブラウザの特徴や人間の行動を読み取るための、証明の仕組み、証明の空間、およびウェブAPIのプローブを実行します。効率的なエージェントは、そのプロファイルをすぎるほどクリーンであるため失敗します。
ほとんどのエージェントはクラウドインフラストラクチャで動作します。そのデータセンターIP範囲はよく分類されており、重く罰せられます。正しいように見える他のすべての要素でも、知られているボットホスティング範囲からのリクエストは疑いを引き起こします。
他のシグナルが曖昧な場合、クラウドフレアはチャレンジを発行します。ターニスティールはその現代的な形態です。古い画像パズルに代わる静かな評価です。人間にとっては、しばしば目に見えません。AIエージェントがクラウドフレア・ターニスティールで停止している場合、クリックするものや明確な通過方法は存在しません。
人々はこれらを頻繁に混同します。異なる処理が必要なので、コードを書く前に区別することが重要です。
ターニスティールはフォームに埋め込まれたウィジェットです。ログイン、サインアップ、またはチェックアウト時に通常表示されます。完全なチャレンジは、別途のフルページのインタースティシャルです。"Just a moment..."スクリーンを表示し、cf_clearanceクッキーの要件とともに403ステータスコードを返します。どのタイプに遭遇しているかを知ることは、全体的なアプローチを決定します。以下の比較は実際の違いを示しています。
| 要因 | クラウドフレア・ターニスティール | 完全なクラウドフレアチャレンジ |
|---|---|---|
| 表示される場所 | フォーム内の埋め込みウィジェット | フルページのインタースティシャル |
| 可視的なサイン | 小さなチェックボックスまたは非表示 | "Just a moment..."スクリーン、403ステータス |
| 必要なものです | websiteURL + websiteKey |
ターゲットURL + スティッキープロキシ + ユーザーエージェント |
| プロキシが必要 | いいえ | はい(スタティックまたはスティッキー) |
| 出力 | レスポンストークン | cf_clearanceクッキーとトークン |
| 通常の解決時間 | 1–20秒 | 2–20秒 |
チャレンジをターニスティールとして扱うことは最も一般的な間違いです。ウィジェットのアプローチでは、フルページのブロックに有効なクッキーは取得できません。
自動化ブラウザをより説得力のあるものにしようとするのは誤った直感です。その設定を修正することは、常に更新される検出システムと戦う無駄なレースです。実用的な方法は、検証ステップをエージェントの主要ロジックから分離することです。専用のサービスにトークン生成を委譲し、その後エージェントがそのトークンを送信するようにします。
これは、CapSolverのようなCAPTCHA解決サービスがワークフローに適合する場面です。検証ステップに有効なトークンを生成し、エージェントがタスクを続けるようにします。フローは3つの部分から構成されます:パラメータを読み取り、トークンをリクエストし、トークンを挿入します。
ターニスティールには2つの入力が必要です:ページURLとサイトキー。サイトキーはターニスティール要素のページHTMLに存在します。レンダリングされたDOMから読み取るか、ブラウザ拡張機能で抽出できます。この手順は、クラウドフレア・ターニスティールパラメータの識別方法のウォークスルーで詳細に説明されています。
URLとサイトキーでタスクを作成します。ターニスティールはクライアントサイドのチェックなので、ここではプロキシは必要ありません。タスクタイプはAntiTurnstileTaskProxyLessです。結果が準備できるまでポーリングします。
# pip install requests
import requests
import time
api_key = "YOUR_API_KEY"
site_key = "0x4XXXXXXXXXXXXXXXXX" # ターゲットページのサイトキー
site_url = "https://www.yourwebsite.com"
def solve_turnstile():
payload = {
"clientKey": api_key,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteKey": site_key,
"websiteURL": site_url,
"metadata": {
"action": "" # オプショナル、存在する場合はdata-action属性に一致
}
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
task_id = res.json().get("taskId")
if not task_id:
print("タスクの作成に失敗しました:", res.text)
return None
while True:
time.sleep(1)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": api_key, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("errorId"):
print("解決に失敗:", result)
return None
token = solve_turnstile()
print(token)
完全なパラメータリファレンス、オプションのactionおよびcdataフィールドを含むものは、クラウドフレア・ターニスティールAPIガイドに記載されています。
トークンは一度限りです。通常はcf-turnstile-responseの予期される応答フィールドに配置し、エージェントのブラウザセッション内でフォームを送信します。各送信ごとに新しいトークンをリクエストしてください。キャッシュや再利用はしないでください。
# エージェントのブラウザセッション内で(Playwrightの例)
page.evaluate(
"""(token) => {
const field = document.querySelector('[name="cf-turnstile-response"]');
if (field) field.value = token;
}""",
token,
)
# その後、フォームの通常の送信アクションをトリガー
エージェントが「Just a moment...」画面に遭遇した場合、AntiCloudflareTaskタイプに切り替えてください。このタイプにはスタティックまたはスティッキープロキシと本物のユーザーエージェントが必要です。これにより、cf_clearanceクッキーが取得され、その後セッションにアタッチされます。設定方法、ページHTMLを渡すタイミングなどは、クラウドフレアチャレンジガイドに記載されています。チャレンジではローテーションプロキシはこのフローを破壊するので、リクエスト全体を通じてIPを安定させましょう。
トークンが成功して返される場合でも、拒否されることがあります。これは一般的な原因です。
AntiTurnstileTaskProxyLessが必要です。フルページにはAntiCloudflareTaskが必要です。data-actionがある場合、メタデータにそれを渡してください。より広範な技術とツールの説明については、ターニスティールCAPTCHAを解決する方法のガイドが現在の方法をカバーしています。ブラウザフレームワークを運用しているチームは、AIワークフローでのPlaywrightステルスに関する記事も、問題のファイントラッキング側面で役立つかもしれません。
これはコードと同じくらい重要です。検証を処理するのは、あなたが所有するサイトまたは明示的に自動化が許可されているサイトに限定してください。良い使用例には、自社フォームのQAテスト、権利のあるデータのモニタリング、承認された公開データ収集が含まれます。構築する前に各ターゲットの利用規約を確認してください。ロボットルールとレートリミットを尊重してください。プライベートアカウントへのアクセス、保護された個人データの収集、サイトオーナーが明確に述べた意図を回避するためには決して使用しないでください。ターニスティールを処理するAIエージェントも、人間のオペレーターが従うのと同じルールに従う必要があります。許可された範囲内で動作させることで、あなた自身とプロジェクトの両方を保護できます。
クラウドフレア・ターニスティールで停止しているAIエージェントの問題は予測可能なものであり、明確な解決策があります。ブロックの原因はエージェントの知性ではなく、ファイントラッキング、行動、IPシグナルです。検証をメインロジックから分離する必要があります:サイトキーを読み取り、解決サービスからトークンをリクエストし、挿入して送信します。実際に遭遇しているタスクタイプ(ウィジェットまたはフルページ)に一致させる必要があります。その後、すべての実行を許可範囲内で行うようにしてください。そのように行うことで、エージェントはコーナーカットすることなく壁を越えられます。
今日、エージェントが停止している場合、まずターニスティールAPIガイドから開始し、チャレンジタイプを確認し、3段階のフローをワークフローに組み込みましょう。
クラウドフレア・ターニスティールは「Just a moment...」画面と同じですか?
いいえ。ターニスティールはフォーム内の小さなウィジェットです。"Just a moment..."ページは完全なクラウドフレアチャレンジです。異なるタスクタイプと異なる設定が必要なので、まず遭遇しているものを特定してください。
ターニスティールを処理するのにプロキシが必要ですか?
ターニスティールウィジェット自体には必要ありません。これはクライアントサイドのチェックなので、プロキシレスのタスクタイプが動作します。フルページのチャレンジは異なり、スタティックまたはスティッキープロキシが必要です。
解決が成功したにもかかわらずトークンが拒否されるのはなぜですか?
最も一般的な原因はトークンの再利用、ユーザーエージェントの不一致、または誤ったタスクタイプです。ターニスティールトークンは一度限りなので、各送信ごとに新しいものをリクエストしてください。
AIエージェントは既存のブラウザセッション内でこれを行えますか?
はい。解決サービスからトークンをリクエストし、フォームを送信する前にエージェントのブラウザセッション内の予期される応答フィールドに挿入してください。
このようにクラウドフレア・ターニスティールを処理することは合法ですか?
ターゲットとあなたの許可に依存します。所有するサイトや自動化が許可されているサイトにのみ使用し、各サイトの利用規約に従い、レートリミットを尊重してください。許可が仕事を合法にする鍵です。
PythonのHTTP処理におけるurllib3とRequestsを比較する。速度、コントロール、再試行、セッション、スクリーピングの適合性、そして実際の使い勝手でそれぞれのライブラリが最も適しているのはいつかを学ぶ。

オンラインプライバシーおよび個人情報削除のためのAIブラウザ自動化が、法的なオプトアウト、証拠の収集、およびモニタリングをサポートする方法を学びましょう。

AIにおけるデータの基盤とは何かを学び、LLMの精度をどう向上させるか、RAGとの比較、そして責任を持って適用する方法について学びましょう。
