2026年におけるWebスクレイピング時のCloudflareの解決方法 | ステップバイステップガイド

Sora Fujimoto
AI Solutions Architect
09-Dec-2025

ウェブスクレイピング中に発生する一般的なCloudflareのステータスコード
エラー1020
Cloudflareエラー1020は、アクセスが拒否されたことを示します。これは、Cloudflareで保護されたウェブサイトのファイアウォールルールが違反されたときにトリガーされます。サイトに過剰なリクエストを送信するなどのアクションがこの違反を引き起こすことがあります。
この問題を修正する一般的な方法:
- IPアドレスを隠すためにローテーティングプロキシを使用する。
- User-Agentヘッダーを変更し、ローテーティングする。
- requestsライブラリを使用している場合は、HTTPクライアントがTLSをサポートしていることを確認する。
- Puppeteer、Playwright、Seleniumなどのブラウザ自動化ツールを使用する。
エラー1015 / 429 レートリミット
Cloudflareエラー1015は、スクレイピング活動中にサイトのレートリミットを超過したため、IPアドレスがCloudflareによってブロックされたときに発生します。これにより、このエラーに遭遇することがあります。
この問題を修正する一般的な方法:
- 大規模なローテーティングプロキシまたはプロキシプールを使用する
- サイトがヘッダーで追跡していないか確認する。一部のヘッダーは、トラッキングを引き起こし、リクエストのレートリミットを設定する可能性がある
- TLSのファーザープリント、TCP、またはその他の方法でファーザープリントされていないか確認する
エラー403
403ステータスコードは、サーバーがリクエストを有効と認識しているが、満たそうとしない「Forbidden(禁止)」の応答ステータスです。これは、リクエストに必要なヘッダー(CORS、JWT、認証ヘッダーなど)が欠如しているため発生する可能性があります。
ウェブサイトが通常はアクセス可能であり、正しいヘッダーを追加しても問題が解決しない場合、サーバーがリクエストを自動化されたものとして検出している可能性があります。
この問題を修正する一般的な方法:
- 正しいヘッダー、リクエスト情報を送信していない
- プロキシがブロックされている
- JavaScriptチャレンジを解決する必要がある。このチャレンジを解決する方法については、Cloudflare Challenge 5sに関するブログを確認してください
- サイトがすべてのトラフィックを許可していない
CapSolverのボーナスコードを取得
自動化予算を即座に増やす!
CapSolverアカウントにチャージする際にボーナスコード CAPN を使用すると、毎回チャージするたびに5%のボーナスが得られます — 限度はありません。
CapSolverダッシュボードで今すぐ取得してください。
.
Cloudflare Challenge 5sとCloudflare Turnstileキャプチャを識別する
Cloudflare Challenge 5s
Cloudflareチャレンジは次のようになります:

このページにはTurnstileが含まれている場合があります

Cloudflare Challenge 5sを解決する必要があることを確認し、単なるTurnstileではないことを確認してください。単なるTurnstileの場合、このブログを引き続きお読みください。
Capsolverを使用してこのチャレンジを解決するにはいくつかの要件があります。
- プロキシ
- Capsolver APIキー
Capsolverにタスク情報を送信する
json
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiCloudflareTask",
"websiteURL": "https://www.yourwebsite.com",
"proxy": "158.120.100.23:334:user:pass"
}
}
正常に送信した後、APIはtaskIdを返します
json
{
"errorId": 0,
"taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
"status": "idle"
}
このtaskIdの値を取得し、getTaskResultメソッドで結果を取得するために使用します。
結果を取得する
json
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "taskId"
}
システムの負荷に応じて、結果は1sから20sの間で取得されます。
レスポンスでERROR_CAPTCHA_SOLVE_FAILEDを受信した場合、いくつかの理由が考えられます:
- あなたのプロキシはCloudflareチャレンジ5sを解決する必要がない(一部のウェブサイトでは悪いプロキシ、ボットのアクション、またはボットのリクエストをトリガーする他の要因のみ有効になります)。他の場合、常に有効になります。
- あなたのプロキシはCloudflareによってブロックされており、チャレンジを通過できないループに陥っています
- ウェブサイトはCloudflareチャレンジを使用していません。チャレンジかTurnstileかを確認してください。例の画像を確認してください。
- プロキシがタイムアウトを発生させています。これは、リジデンシャルプロキシを使用するときによくあることです
成功したレスポンスを受信した場合、次のようになります:
json
{
"errorId": 0,
"taskId": "d8d3a8b4-30cc-4b09-802a-a476ca17fa54",
"status": "ready",
"solution": {
"accept-language": "en-US,en;q=0.9",
"cookies": {
},
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"cache-control": "max-age=0",
"content-type": "application/x-www-form-urlencoded",
"origin": "",
"referer": "",
"sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
"sec-ch-ua-arch": "\"arm\"",
"sec-ch-ua-bitness": "\"64\"",
"sec-ch-ua-full-version": "\"120.0.6099.71\"",
"sec-ch-ua-full-version-list": "\"Not_A Brand\";v=\"8.0.0.0\", \"Chromium\";v=\"120.0.6099.71\", \"Google Chrome\";v=\"120.0.6099.71\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-model": "\"\"",
"sec-ch-ua-platform": "\"macOS\"",
"sec-ch-ua-platform-version": "\"10.14.6\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
},
"proxy": "your proxy",
"token": "cf clearance token",
"type": "challenge",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
}
このレスポンスから、cookies、headers、tokenの値を解析する必要があります。
あなたのリクエストは次のようになります:
- リクエストのヘッダーは、レスポンスで返されたものと同じでなければなりません
- リクエストのクッキーは、レスポンスで返されたものと同じでなければなりません
- リクエストクライアントはTLS設定をサポートしなければなりません。この場合、TLS Chrome 120を使用してください
- ウェブサイトにアクセスする際とcf_clearanceクッキーを使用する際には同じプロキシを使用してください
- token値は、作成するためのcf_clearanceクッキー値になります
PythonでCloudflare Challengeを解決する例
python
# -*- coding: utf-8 -*-
import requests
import time
import tls_client
# TODO: あなたのAPIキー
API_KEY = ""
proxy = ""
# TODO: 対象となるサイトのURL:
page_url = ''
def call_capsolver():
data = {
"clientKey": API_KEY,
"task": {
"type": 'AntiCloudflareTask',
"websiteURL": page_url,
"proxy": proxy,
}
}
uri = 'https://api.capsolver.com/createTask'
res = requests.post(uri, json=data)
resp = res.json()
task_id = resp.get('taskId')
if not task_id:
print("taskIdを取得できませんでした:", res.text)
return
print('taskIdを作成しました:', task_id)
while True:
time.sleep(1)
data = {
"clientKey": API_KEY,
"taskId": task_id
}
response = requests.post('https://api.capsolver.com/getTaskResult', json=data)
resp = response.json()
status = resp.get('status', '')
if status == "ready":
print("成功 => ", response.text)
return resp.get('solution')
if status == "failed" or resp.get("errorId"):
print("失敗! => ", response.text)
return
def request_site(solution):
session = tls_client.Session(
client_identifier="chrome_120",
random_tls_extension_order=True
)
return session.get(
page_url,
headers=solution.get('headers'),
cookies=solution.get('cookies'),
proxy=proxy,
)
def main():
solution = {
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"sec-fetch-site": "none",
"sec-fetch-mode": "navigate",
"sec-fetch-user": "?1",
"sec-fetch-dest": "document",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
}
}
# 1回目のリクエスト(プロキシの確認):
res = request_site(solution)
print('1. レスポンスステータスコード:', res.status_code)
if res.status_code != 403:
print("プロキシは問題なく、Cloudflareチャレンジに遭遇していません")
return
elif 'window._cf_chl_opt' not in res.text:
print('==== プロキシがブロックされています ==== ')
return
# CapSolverを呼び出す:
solution = call_capsolver()
if not solution:
return
# 2回目のリクエスト(解決策の確認):
res = request_site(solution)
print('2. レスポンスステータスコード:', res.status_code)
if __name__ == '__main__':
main()
Cloudflare Turnstileキャプチャ
Cloudflare Turnstileキャプチャは次のようになります:
-
マネージドチャレンジ

-
非対話型チャレンジ

-
非表示チャレンジ
非表示です。ネットワーク/スクリプトが読み込まれているか確認し、Turnstileが使用されているかを確認してください
Cloudflare Challenge 5sではなく、Cloudflare Turnstileキャプチャを解決する必要があることを確認してください。Cloudflare Challengeのみの場合、このブログを引き続きお読みください。
Capsolverを使用してこのチャレンジを解決する際の要件:
- Capsolver APIキー
Capsolverにタスク情報を送信する
json
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": "https://www.yourwebsite.com",
"websiteKey": "0x4XXXXXXXXXXXXXXXXX",
"metadata": {
"action": "login", //オプション
"cdata": "0000-1111-2222-3333-example-cdata" //オプション
}
}
}
"action"と"cdata"はオプションで、サイトの構成によっては必要になることもあります。
actionは、Turnstile要素のdata-action属性の値です。
cdataは、Turnstile要素のdata-cdata属性の値です。
正常に送信した後、APIはtaskIdを返します
json
{
"errorId": 0,
"taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
"status": "idle"
}
このtaskIdの値を取得し、getTaskResultメソッドで結果を取得するために使用します。
結果を取得する
json
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "taskId"
}
システムの負荷に応じて、結果は1sから20sの間で取得されます。
レスポンスでERROR_CAPTCHA_SOLVE_FAILEDを受信した場合、いくつかの理由が考えられます:
- あなたのプロキシはCloudflareチャレンジ5sを解決する必要がない(一部のウェブサイトでは悪いプロキシ、ボットのアクション、またはボットのリクエストをトリガーする他の要因のみ有効になります)。他の場合、常に有効になります。
- あなたのプロキシはCloudflareによってブロックされており、チャレンジを通過できないループに陥っています
- ウェブサイトはCloudflareチャレンジを使用していません。チャレンジかTurnstileかを確認してください。例の画像を確認してください。
- プロキシがタイムアウトを発生させています。これは、リジデンシャルプロキシを使用するときによくあることです
成功したレスポンスを受信した場合、次のようになります:
json
{
"errorId": 0,
"taskId": "d1e1487a-2cd8-4d4a-aa4d-4ba5b6c65484",
"status": "ready",
"solution": {
"token": "0.cZJPqwnyDxL86HvAXSk4lUTQhjwfyXDcR3qpVwFofuzosoKr1otKj_A-utazXx_Tnp1B2V6womrltBpRw9HbY851ktpaF7sBN-gQwtoRUew4Wj5PO4-WLYPnNRpXxludXzyQ.1oHJhu7619fb8c07ab942bd1587bc76e0e3cef95c7aa75400c4f7d3",
"type": "turnstile",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
}
このレスポンスから、tokenの値を解析し、この値がサイトに送信する必要のあるキャプチャ解決になります。
print("Turnstile CAPTCHAが解決されました、トークン:", token)
end_time = time.time()
elapsed_time = end_time - start_time
print(f"CAPTCHAを解決するのにかかった時間: {elapsed_time} 秒")
if name == "main":
main()
## Cloudflareチャレンジを解決するためのNodeJS例
```js
const axios = require('axios');
const CAPSOLVER_API_KEY = "";
const PAGE_URL = "";
const WEBSITE_KEY = "";
async function solvecf(metadata_action = null, metadata_cdata = null) {
const url = "https://api.capsolver.com/createTask";
const task = {
type: "AntiTurnstileTaskProxyLess",
websiteURL: PAGE_URL,
websiteKey: WEBSITE_KEY,
};
if (metadata_action || metadata_cdata) {
task.metadata = {};
if (metadata_action) {
task.metadata.action = metadata_action;
}
if (metadata_cdata) {
task.metadata.cdata = metadata_cdata;
}
}
const data = {
clientKey: CAPSOLVER_API_KEY,
task: task
};
const response = await axios.post(url, data);
console.log(response.data);
return response.data.taskId;
}
async function solutionGet(taskId) {
const url = "https://api.capsolver.com/getTaskResult";
let status = "";
while (status !== "ready") {
const data = { clientKey: CAPSOLVER_API_KEY, taskId: taskId };
const response = await axios.post(url, data);
console.log(response.data);
status = response.data.status;
console.log(status);
if (status === "ready") {
return response.data.solution;
}
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
async function main() {
const start_time = Date.now();
const taskId = await solvecf();
const solution = await solutionGet(taskId);
if (solution) {
const user_agent = solution.userAgent;
const token = solution.token;
console.log("User_Agent:", user_agent);
console.log("Turnstile CAPTCHAが解決されました、トークン:", token);
}
const end_time = Date.now();
const elapsed_time = (end_time - start_time) / 1000;
console.log(`CAPTCHAを解決するのにかかった時間: ${elapsed_time} 秒`);
}
main().catch(console.error);
🏁 結論
Cloudflareは、標準的なHTTPブロック(例: 1020、403、429(1015))から、より高度なチャレンジ(例: Cloudflareチャレンジ5秒やTurnstile CAPTCHA)に至るまで、複数の保護メカニズムを実装しています。ウェブスクレイピングや自動化を行う際には、現在の保護がどのタイプかを特定することが最初の鍵となります。
このガイドでは、一般的なCloudflareのステータスコード、チャレンジ5秒とTurnstile CAPTCHAの区別の仕方、そしてCapsolver APIを使用してそれらを解決するための実用的な例について説明しました。PythonとNodeJSの実装例も紹介しています。
適切なアプローチを選択することで(プロキシのローテーション、ヘッダーの適切な設定、指紋保護、またはCAPTCHA/チャレンジをプログラムで解決する方法)、スクリーピングの成功確率を大幅に向上させ、ブロックを減らすことができます。
もしリクエストがまだブロックされている場合は、スクリーパーの設定を確認してください。プロキシの品質、ヘッダー、TLS指紋、リクエストの頻度は、CAPTCHAソルバーそのものと同じくらい重要です。
❓ よくある質問(FAQ)
1. Cloudflareチャレンジ5秒とTurnstile CAPTCHAのどちらに直面しているかをどうやって知ればよいですか?
UIやネットワークリクエストを確認してください。
- 5秒の「ブラウザの確認中…」ページが表示される場合 → チャレンジ5秒
- 確認ウィジェットが表示される(または非表示のトークン生成)場合 → Turnstile CAPTCHA
2. チャレンジを解決した後でもブロックされるのはなぜですか?
考えられる理由:
- プロキシがブロックされているか、品質が低い
- 解決後のヘッダーが不足しているか誤っている
- リクエスト全体を通して同じプロキシを維持していない
- TLS指紋の不一致
3. Cloudflareを解決する際、常にプロキシが必要ですか?
- チャレンジ5秒にはプロキシが必要です
- Turnstileはプロキシレスでも可能ですが、セキュリティが厳しいサイトではプロキシが役立ちます
4. スケールしてCloudflareを自動的に解決することは可能ですか?
はい。良いプロキシ、指紋のローテーション、トークンの再利用ロジックを用いれば、スクリーピングをスケールさせることができます。ただし、ウェブサイトの利用規約や地域の法律に準拠していることを確認してください。
5. Turnstileはチャレンジ5秒よりも難易度が高いですか?
Turnstileは通常、単一のトークンを返すため、チャレンジ5秒よりも解決が簡単です。チャレンジ5秒はクッキー、ヘッダー、プロキシの一貫性が必要で、より複雑です。
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。
もっと見る

2026年におけるWebスクレイピング時のCloudflareの解決方法 | ステップバイステップガイド
このブログ記事では、CapSolverというCAPTCHAを解決するのに熟練したツールを活用して、これらの防御を突破するための効果的な技術について詳しく解説します。Cloudflareのセキュリティプロトコルの説明から、これらの制限を回避するための実用的な戦略やコードサンプルの提供に至るまで、詳しく解説します。

Sora Fujimoto
09-Dec-2025

Cloudflare Turnstile CAPTCHA を NodeJS で解決する方法
本記事では、Node.jsを使用してCloudflare Turnstile CAPTCHAを解決する方法を紹介します。

Aloísio Vítor
08-Dec-2025

Cloudflare 403アクセス拒否エラーおよび522/1020/1010/1015/1012の解決方法
Cloudflareは、ウェブサイトがDDoS攻撃や悪質なボットなどのさまざまな脅威を軽減するのを支援する、広く利用されているコンテンツ配信ネットワーク(CDN)およびセキュリティサービスです。

Sora Fujimoto
08-Dec-2025

クラウドフレア エラー 1006、1007、1008 解決の方法 | 修正方法
Cloudflareのエラー1006、1007、または1008に苦しんでいますか?これらのアクセス拒否を解決し、ウェブクローリング体験を向上させる実用的な解決策を学びましょう。

Sora Fujimoto
05-Dec-2025

CapSolver拡張機能を使用してCloudflare Turnstileを解決する際に`action`が必要かどうかを確認する方法
クラウドフレア・ターニスティルの効果的なCAPTCHAの解決方法を学びます。Capsolverのツールとテクニックを使用するためのステップバイステップのガイドに従ってください。

Nikolai Smirnov
05-Dec-2025

CloudflareチャレンジをNode.jsで解決する方法
CloudflareがNode.jsスカッパーをブロックする理由と、開発者がデータワークフローでcf_clearanceを信頼性を持って取得する方法についての考察

Sora Fujimoto
03-Dec-2025


.