
Sora Fujimoto
AI Solutions Architect

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

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

Cloudflare Challenge 5sを解決する必要があることを確認し、単なるTurnstileではないことを確認してください。単なるTurnstileの場合、このブログを引き続きお読みください。
Capsolverを使用してこのチャレンジを解決するにはいくつかの要件があります。
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を返します
{
"errorId": 0,
"taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
"status": "idle"
}
このtaskIdの値を取得し、getTaskResultメソッドで結果を取得するために使用します。
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を受信した場合、いくつかの理由が考えられます:
成功したレスポンスを受信した場合、次のようになります:
{
"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の値を解析する必要があります。
あなたのリクエストは次のようになります:
# -*- 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キャプチャは次のようになります:
マネージドチャレンジ

非対話型チャレンジ

非表示チャレンジ
非表示です。ネットワーク/スクリプトが読み込まれているか確認し、Turnstileが使用されているかを確認してください
Cloudflare Challenge 5sではなく、Cloudflare Turnstileキャプチャを解決する必要があることを確認してください。Cloudflare Challengeのみの場合、このブログを引き続きお読みください。
Capsolverを使用してこのチャレンジを解決する際の要件:
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を返します
{
"errorId": 0,
"taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
"status": "idle"
}
このtaskIdの値を取得し、getTaskResultメソッドで結果を取得するために使用します。
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を受信した場合、いくつかの理由が考えられます:
成功したレスポンスを受信した場合、次のようになります:
{
"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ソルバーそのものと同じくらい重要です。
UIやネットワークリクエストを確認してください。
考えられる理由:
はい。良いプロキシ、指紋のローテーション、トークンの再利用ロジックを用いれば、スクリーピングをスケールさせることができます。ただし、ウェブサイトの利用規約や地域の法律に準拠していることを確認してください。
Turnstileは通常、単一のトークンを返すため、チャレンジ5秒よりも解決が簡単です。チャレンジ5秒はクッキー、ヘッダー、プロキシの一貫性が必要で、より複雑です。
Cloudflareエラー1005:アクセスが拒否されました。ウェブスクリーピング中にこれを修正する方法を学びましょう。リジデンシャルプロキシ、ブラウザファイントラッキング、CAPTCHA用のCapSolverなどの解決策を発見してください。データ抽出を最適化してください。

Cloudflare TurnstileをAIワークフローで効果的に処理する方法を学び、Playwrightのステルス手法とCapSolverを活用して信頼性の高いキャプチャ解決を実現します。実用的な統合戦略と、途切れることのないオートメーションのためのベストプラクティスを学びましょう。
