製品統合リソースドキュメント料金
今すぐ開始

© 2026 CapSolver. All rights reserved.

お問い合わせ

Slack: lola@capsolver.com

製品

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • ブラウザ拡張機能
  • その他多数のCAPTCHAタイプ

統合

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • パートナー
  • すべての統合を表示

リソース

  • 紹介プログラム
  • ドキュメント
  • APIリファレンス
  • ブログ
  • よくある質問
  • 用語集
  • ステータス

法務

  • 利用規約
  • プライバシーポリシー
  • 返金ポリシー
  • 個人情報を販売しない
ブログ/AI/AIエージェント向けCAPTCHAチャレンジの解決方法: n8n、CapSolver、OpenClawを用いたデータ抽出
Mar10, 2026

AIエージェント向けCAPTCHAチャレンジの解決方法: n8n、CapSolver、OpenClawを用いたデータ抽出

Sora Fujimoto

Sora Fujimoto

AI Solutions Architect

n8n、CapSolver、OpenClawを使ったデータ抽出

AIアシスタントに自動化されたサーバーサイドのデータ抽出をトリガーする機能を付与します — ブラウザのインジェクションやコードは必要ありません。

課題: CAPTCHAがAIエージェントの効率を妨げる

AIエージェントがウェブをナビゲートする際、CAPTCHAが主な障害物となります。保護されたページはエージェントをブロックし、フォームの送信ができない、タスクが人間の介入を待って停止します。これにより、自動データスクリーニングや情報処理におけるAIエージェントの効率と自律性が大きく制限されます。

この根本的な問題に対処するため、OpenClawとCapSolverの2つの強力なソリューションを提供します。

アプローチ1 — ブラウザ拡張機能の統合

OpenClawのブラウザ環境にCapSolverのChrome拡張機能をロードします。この拡張機能はクライアントサイドでCAPTCHAを検出・解決し、n8nの関与なしにスムーズに検証を回避します。これにより、AIエージェントはページをナビゲートしながら検証を無視できます。(拡張機能アプローチの詳細なガイドはこちらを参照)

アプローチ2 — サーバーサイドのn8nオートメーションパイプライン(本ガイドの焦点)

OpenClawが単一のwebhookリクエストをトリガーし、n8nがCapSolver APIを通じてCAPTCHAを解決し、フォームを送信し、AIエージェントにクリーンなページコンテンツを返します。このプロセスでは、AIエージェントが直接CAPTCHA検証を扱いません。

作成する内容:

OpenClawがwebhook経由でトリガーするサーバーサイドのCAPTCHAオートメーションパイプライン。n8nはCapSolverを活用してCAPTCHAを解決し、フォームを送信し、処理済みのページコンテンツをAIエージェントに返します。これにより、データ抽出タスクのスムーズな実行が保証されます。


前提条件

開始する前に、以下の環境とツールを確保してください:

  1. OpenClawがインストールされており、ゲートウェイが動作していること (openclaw gateway start)
  2. n8nがローカルで動作している — インストールガイド
  3. CapSolverアカウントとAPIキー — サインアップはこちら
  4. n8nにCapSolverノードが利用可能 — (公式統合 — 既に組み込まれています)

n8nでのCapSolverの設定

CapSolverはn8nの公式統合として利用可能で、追加のコミュニティノードのインストールは必要ありません。ワークフローを構築する際、ノードパネルで直接見つけることができます。CapSolverノードをアカウントと認証するには、n8nで資格情報を設定する必要があります。

n8nのキャンバスを開き、**+**をクリックしてノードを追加し、CapSolverを検索してください。このノードは、タスクの作成、ポーリング、トークンの取得を1つのユニットで処理します。

資格情報を追加する手順:

  1. n8nで 資格情報 → 新規資格情報 を選択
  2. CapSolverを検索
  3. CapSolverダッシュボードから取得したAPIキーを貼り付け
  4. 保存

重要: ワークフロー内のすべてのCapSolverノードはこの資格情報を参照します。1度だけ作成すればよく、すべてのCAPTCHA解決ワークフローが同じ資格情報を共有します。さらに、CapSolverは公式に豊富なGitHubスキルリポジトリを提供しており、CapSolverに関連する他の統合や使用例を探索できます。これにより、AIエージェントの能力をさらに拡張できます。


ワークフロー: OpenClaw CAPTCHAオートメーションパイプライン

以下のすべては例です。URL、フィールド名、CAPTCHAタイプ、成功条件、応答構造 — すべてはここでのデモサイトに特化しています。実際のターゲットは異なります。各ノードの設定は完成形ではなく、スタート地点として扱ってください。

仕組み

  1. Webhook — OpenClaw(または任意のHTTPクライアント)からのPOSTリクエストを受け取ります。
  2. CapSolver — 設定されたタスクタイプを使用してCAPTCHAを解決します。
  3. HTTPリクエスト — 解決されたトークンをターゲットサイトに送信します。
  4. If — 応答が成功または失敗を示しているかを確認します。
  5. フィールド編集 — 応答からpageTextを抽出します。
  6. Webhookへの応答 — 結果を呼び出し元に返します。
Copy
Webhook ──► CAPTCHAを解決 ──► トークンを送信 ──► 成功? ──► 結果を抽出 ──► Webhookに応答
                                                         └─► 失敗をマーク ───┘

ノード設定の詳細

「OpenClaw/Capsolver/n8n Scraper」という新しいワークフローを作成し、以下のノードを使用します:

1. Webhookノード

  • タイプ: Webhook
  • HTTPメソッド: POST
  • パス: openclaw/scrape
  • 応答: 応答ノード (コールを同期的に行う — 呼び出し元は結果を待機します)

2. CapSolverノード

  • タイプ: CapSolver
  • タスクタイプ: ReCaptchaV2TaskProxyless
  • ウェブサイトURL: https://example.com/protected-page
  • ウェブサイトキー: YOUR_SITE_KEY (ページソース内でdata-sitekeyを検索)
  • 資格情報: CapSolverのAPIキー

reCAPTCHA v3を使用している場合、タスクタイプをReCaptchaV3TaskProxylessに切り替え、Page Actionフィールドを追加(例: login、submit、homepage)。これはv3で必須です — サイトがGoogleと登録するアクション名です。grecaptcha.execute(...)の呼び出し近くで見つかります。

各CAPTCHAタイプには固有のパラメータセットがあります — v2ではオプションだったフィールドがv3では必須になる場合があります。また、v3ではv2に存在しないフィールド(例: minScore)が表示される場合もあります。必ずCapSolverドキュメントでタスクタイプに必要な正確なパラメータを確認してください。

このノードはCapSolver APIを呼び出し、解決を待機(通常5〜20秒)し、$json.data.solution.gRecaptchaResponseでトークンを返します。

3. HTTPリクエストノード

  • メソッド: POST
  • URL: https://example.com/protected-page
  • ボディ: form-urlencoded
    • g-recaptcha-response = ={{ $json.data.solution.gRecaptchaResponse }}
  • ヘッダー: 通常のブラウザヘッダー(User-Agent、Accept、Referer、Originなど)

これはブラウザと同じようにフォームを送信します。

ヒント: トークンの送信方法はサイトによって異なります。多くのフォームではg-recaptcha-responseとしてリクエストボディに送信しますが、一部のサイトではJSONフィールド、カスタムヘッダー、またはクッキー、異なる名前で送信する場合があります。実際の送信内容を確認するには、ブラウザのDevTools(Networkタブ)を使用し、HTTPリクエストノードでそれに合わせて設定してください。

4. Ifノード(成功確認)

  • 条件: $json.dataに"recaptcha-success"が含まれている
  • Trueブランチ → フィールド編集(成功)
  • Falseブランチ → フィールド編集1(失敗)

5. フィールド編集 / フィールド編集1ノード

両方のブランチで1つのフィールドを設定します:

  • pageText = {{ $json.data }}

成功と失敗のブランチは両方ともpageTextを渡します — 呼び出し元はHTMLを検査して結果を判断できます。

ご自身のページに合わせてカスタマイズしてください: 応答データをパースおよび使用する方法は、ご自身の目的とターゲットサイトが返す内容に完全に依存します。一部のページはJSONを返し、他のページはHTMLを返し、成功時にリダイレクトする場合もあります。特定のフィールドの抽出、テーブルのパース、セッションクッキーの確認、HTMLの完全削除など、ご自身のニーズに合わせてカスタマイズしてください。成功条件("recaptcha-success")も例であり、ご自身のサイトには独自の指標があります。これらのノードはスタート地点として扱い、ご自身のユースケースに合わせてカスタマイズする必要があります。

6. 結果の保存ノード

このノードは、{ pageText, savedAt }をwebhook応答に渡し、オプションで結果をストレージに永続化します。

注意: n8nのCodeノードはNode.jsビルトインモジュール(例: require('fs'))をブロックするサンドボックス環境のVMで実行されます。ディスクに書き込むにはExecute Commandノードを使用してください。または、ご自身のスタックに合った任意のn8n統合でこのノードを置き換えることもできます。

オプションA — ローカルJSONファイル(Execute Commandノード):

2つのノードを連続して使用します:

ノード7a — データ準備(Codeノード):

javascript Copy
const item = $input.first().json;
const now = new Date();
const savedAt = now.toISOString();
const data = { pageText: item.pageText || '', savedAt };
const encoded = Buffer.from(JSON.stringify(data)).toString('base64');
const cmd = 'python3 /path/to/save-result.py ' + encoded;
return [{ json: { cmd, pageText: data.pageText, savedAt } }];

ノード7b — 結果保存(Execute Commandノード):

  • コマンド: ={{ $json.cmd }}

ここでsave-result.pyはbase64引数を読み込み、ローカルJSONファイルに追加します。

オプションB — n8nがサポートする任意のストレージ:

n8nはほぼすべてのストレージシステムに対応するネイティブノードを提供しています。ノード7をこれらのいずれかに置き換えてください:

ストレージ n8nノード
Googleスプレッドシート pageText + タイムスタンプで行を追加
Airtable レコードを作成
Notion データベースエントリを作成
PostgreSQL / MySQL テーブルにINSERT
AWS S3 / Cloudflare R2 JSONファイルをアップロード
Slack / Telegram チャンネルに結果を投稿

Edit FieldsとRespond to Webhookの間にノードを接続し、$json.pageTextとタイムスタンプを保存するように設定してください。

7. Webhookへの応答ノード

  • 応答形式: JSON
  • 応答本文: ={{ JSON.stringify($json) }}
  • 失敗時も継続: 有効

ワークフローを構築したら、有効にしてください。webhookのパスは以下になります:

Copy
POST http://127.0.0.1:3005/webhook/openclaw/scrape

このワークフローをインポート

以下のJSONをコピーし、メニュー → JSONからインポートでn8nにインポートしてください。インポート後、"Solve CAPTCHA"ノードでCapSolverの資格情報を選択してください。

クリックしてワークフローのJSONを展開
json Copy
{
  "nodes": [
    {
      "parameters": {
        "content": "## OpenClaw CAPTCHAオートメーションパイプライン\n\n### 仕組み\n\n1. webhookトリガーでプロセスを開始します。\n2. 専門的なサービスを使用してCAPTCHAを解決しようとします。\n3. CAPTCHAトークンを検証のために送信します。\n4. トークン送信が成功したかを評価します。\n5. 結果を設定し、webhook経由で応答します。\n\n### 設定手順\n\n- [ ] 望ましいエンドポイントURLでwebhookトリガーを設定してください。\n- [ ] CAPTCHA解決サービスの資格情報を設定してください。\n- [ ] トークン送信に適したHTTPリクエストの設定を確認してください。\n- [ ] 成功および失敗の応答メッセージをカスタマイズしてください。\n\n### カスタマイズ\n\n'Success?'ノードで成功および失敗の条件と応答をカスタマイズできます。",
        "width": 480,
        "height": 656
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1312,
        -352
      ],
      "id": "de683912-ba9c-4879-9a8e-38190c4b236c",
      "name": "スタickyノート"
    },
    {
      "parameters": {
        "content": "## 初期化とCAPTCHA解決\n\nwebhookトリガーから始まり、外部サービスを使用してCAPTCHAを解決します。",
        "width": 800,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -752,
        -208
      ],
      "id": "41705a72-53ba-4c61-951b-251f7f35f422",
      "name": "スタickyノート1"
    },
    {
      "parameters": {
        "content": "## トークン送信\n\n解決されたCAPTCHAトークンを検証のために送信し、結果を確認します。",
        "width": 496,
        "height": 304,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        160,
        -224
      ],
      "id": "260fdb86-71a7-46dc-9b41-1abd4ae08b79",
      "name": "スタickyノート2"
    },
    {
      "parameters": {
        "content": "## 結果処理と応答\n\n成功および失敗の結果を処理し、webhook経由で応答を送信します。",
        "width": 496,
        "height": 480,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        768,
        -352
      ],
      "id": "e17032fd-3901-4c2a-aeea-4088c9f79bd4",
      "name": "スタickyノート3"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "openclaw/scrape",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -704,
        -96
      ],
      "id": "oc-909",
      "name": "Webhookトリガー",
      "webhookId": "oc-909-webhook",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL || 'https://example.com/protected-page' }}",
        "websiteKey": "={{ $json.body.websiteKey || 'YOUR_SITE_KEY_HERE' }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        -96
      ],
      "id": "oc-910",
      "name": "CAPTCHAを解決 [Webhook]"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Webhook Trigger').item.json.body.targetURL || 'https://example.com/protected-page' }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            },
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        -96
      ],
      "id": "oc-911",
      "name": "トークンを送信 [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "if-2",
              "leftValue": "={{ String($json.data || $json || '').includes($('Webhook Trigger').item.json.body.successMarker || 'recaptcha-success') }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        512,
        -96
      ],
      "id": "oc-912",
      "name": "成功? [Webhook]"
    },
    {
"parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "ws1",
              "name": "success",
              "value": "true",
              "type": "boolean"
            },
            {
              "id": "ws2",
              "name": "pageText",
              "value": "={{ $json.data || $json }}",
              "type": "string"
            },
            {
              "id": "ws3",
              "name": "savedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        816,
        -224
      ],
      "id": "oc-913",
      "name": "Extract Result [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "wf1",
              "name": "success",
              "value": "false",
              "type": "boolean"
            },
            {
              "id": "wf2",
              "name": "pageText",
              "value": "={{ $json.data || $json }}",
              "type": "string"
            },
            {
              "id": "wf3",
              "name": "error",
              "value": "Response did not contain success marker",
              "type": "string"
            },
            {
              "id": "wf4",
              "name": "savedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        816,
        -48
      ],
      "id": "oc-914",
      "name": "Mark Failed [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1120,
        -96
      ],
      "id": "oc-917",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve CAPTCHA [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve CAPTCHA [Webhook]": {
      "main": [
        [
          {
            "node": "Submit Token [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Token [Webhook]": {
      "main": [
        [
          {
            "node": "Success? [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Success? [Webhook]": {
      "main": [
        [
          {
            "node": "Extract Result [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Mark Failed [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Result [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Failed [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}

OpenClawの統合

OpenClawをこのワークフローに接続するには、トリガー スクリプトを作成し、登録します。

トリガー スクリプトの作成:

bash Copy
cat > ~/.openclaw/scripts/extract-data << \'EOF\'
#!/usr/bin/env bash
curl -s -X POST http://127.0.0.1:3005/webhook/openclaw/scrape
EOF
chmod +x ~/.openclaw/scripts/extract-data

これはOpenClawが実行する唯一のものです。引数も、サイトキーも、URLもありません。ワークフローが何をスクレイプするかを知っています。

OpenClawがデータを取得する方法: スクリプトはn8nが終了するのを待つ(CapSolverの解決 + フォームの送信)後、Webhookの応答で { pageText, savedAt } を直接受け取ります。ファイルの読み込みは関与しません。HTTP経由で同期的にデータが戻ってきます。応答の構造はこのワークフローが返すものと同じです。必要に応じて他のフィールド(例: 解析された価格、ログインステータス、構造化されたJSONオブジェクト)を取得するには、Edit FieldsとSave Resultノードを編集して、ご使用ケースに必要なものを返すようにしてください。

TOOLS.mdにコマンドを登録:

~/.openclaw/workspace/TOOLS.mdを開き、OpenClawがコマンドを認識するように以下のエントリを追加してください:

markdown Copy
### extract-data

実行: `/root/.openclaw/scripts/extract-data`
ライブパイプラインから最新の `{ pageText, savedAt }` を返します。JSON応答の `pageText` フィールドを返します。

AIエージェントの自動化フローをテスト

OpenClawからトリガーを発行します。AIエージェントにDiscord、Telegram、WhatsApp、または他のチャネル経由でこのコマンドを送信してください:

Copy
extract data

OpenClawは extract-data スクリプトを実行し、Webhookを発火して待機します。n8nはCAPTCHAを解決し、フォームを送信し、HTTP応答で { pageText, savedAt } を直接返します。OpenClawはその結果を受け取り、要約します。通常、10〜40秒程度で完了します。

ターミナルからテスト:

bash Copy
curl -s -X POST http://127.0.0.1:3005/webhook/openclaw/scrape

ワークフローをあなたのターゲットサイトに適応させる

このガイドのワークフローは特定のデモサイト用に構築されています。実際のターゲットサイトでは、パイプラインのすべての部分が調整が必要になる場合があります。以下を確認してください:

1. CAPTCHAの種類

すべてのサイトがreCAPTCHA v2を使用しているわけではありません。CapSolverノードのタスクタイプをターゲットに合わせて変更してください:

サイトで表示されるもの n8n ノードの操作
「私はロボットではありません」チェックボックス reCAPTCHA v2
インビジブルreCAPTCHA(自動起動) reCAPTCHA v2
reCAPTCHA v3スコア reCAPTCHA v3
Cloudflare Turnstileウィジェット Cloudflare Turnstile
Cloudflareチャレンジ(5秒のページ) Cloudflare Challenge
GeeTestパズル(v3) GeeTest V3
GeeTestパズル(v4) GeeTest V4
DataDomeボット保護 DataDome
AWS WAF CAPTCHA AWS WAF
MTCaptcha MTCaptcha

また、サイトURLとサイトキーをターゲットに合わせて更新してください。サイトキーはページソースで見つけることができます(data-sitekey属性を検索するか、CapSolverブラウザ拡張機能が自動検出します)。

2. トークンの送信方法

これはサイトごとに最も大きく異なる部分です。このデモサイトは単純なフォームPOSTでトークンをボディフィールドに含めています。あなたのターゲットは異なる可能性があります:

フォームフィールドとして(最も一般的)

Copy
POST /submit
Content-Type: application/x-www-form-urlencoded

g-recaptcha-response=TOKEN&other_field=value

JSONボディとして

Copy
POST /api/login
Content-Type: application/json

{ "username": "...", "password": "...", "captchaToken": "TOKEN" }

ヘッダーとして

Copy
POST /api/action
X-Captcha-Token: TOKEN

クッキーとして

Copy
POST /submit
Cookie: cf_clearance=TOKEN

URLのクエリパラメータとして

Copy
GET /search?q=query&token=TOKEN

手動でターゲットサイトのCAPTCHAを解決するときにブラウザの開発者ツールのネットワークタブを確認してください。解決後にすぐに発生するリクエストを見つけて、トークンがどこに送信されるかを確認してください。

3. HTTPリクエストノード

トークンの送信方法が分かったら、HTTPリクエストノードをそれに合わせて構成してください:

  • メソッド: サイトに合わせて(POST、GET、PUT)
  • URL: フォームまたはAPIコールを受信する正確なエンドポイント
  • ヘッダー: ブラウザのネットワークタブからヘッダーをコピーしてください — User-Agent、Referer、Origin、Accept、Content-Typeは通常必要とされます
  • ボディ: エンドポイントに応じてform-urlencoded、JSON、またはmultipartを使用
  • クッキー: サイトがセッションクッキーを使用している場合、ヘッダーとして渡すか、ログインステップでHTTPリクエストノードを使用して取得してください

4. 必要なデータの抽出

現在のワークフローでは、応答の完全なHTMLが pageText として渡されています。ご使用ケースに応じて、これを後処理する必要があります:

  • HTTPリクエスト後のコードノードを追加してHTMLを解析し、特定のフィールド(製品名、価格、ステータス)を抽出
  • n8nのHTML抽出ノードを使用して、コードを書かずに特定のCSSセレクターからデータを抽出
  • ブランドHTMLではなく構造化されたフィールドを保存 — これにより、実行ごとのクエリと比較が容易になります

5. マルチステップフロー

いくつかのターゲットでは1つのリクエストでは不十分です:

  1. CSRFトークンまたはセッションクッキーを取得するためにページをGET
  2. CAPTCHAを解決
  3. CSRFトークン + CAPTCHAトークン + 資格情報を含むフォームをPOST

n8nで複数のHTTPリクエストノードをチェーンして処理してください。ノード間で $json 式を使用して値を渡してください。


問題解決

"n8nスクレイパーに到達できませんでした"

json Copy
{"success": false, "error": "n8nスクレイパーに到達できませんでした。OpenClaw CAPTCHAスクレイパーのワークフローがアクティブになっていますか?"}

確認: n8nが実行中ですか?ワークフローが有効になっていますか?n8nを開き、ワークフローがActive(緑色のトグル)になっているか確認してください。

CapSolverタイムアウト / トークンが取得できなかった

可能性のある原因:

  • 無効なAPIキー — ~/.n8n/credentials を確認してください
  • サービス残高が不足 — capsolver.com/dashboard で残高を追加してください
  • n8nサーバーとCapSolver API間のネットワーク問題

pageText が空またはエラーページを含んでいる

  • HTTPリクエストのURLまたはフォームフィールド名がターゲットに合っていません
  • g-recaptcha-response フィールド名を確認してください — 一部のサイトでは別のフィールド名を使用しています
  • HTTPリクエストノードで fullResponse: true を有効にしてステータスコードを確認してください

完全な構成リファレンス

n8nワークフローのノード概要

ノード タイプ キー設定
Webhook n8n-nodes-base.webhook POST、パス: openclaw/scrape、responseMode: responseNode
サイトスクレイプ n8n-nodes-capsolver.capSolver タスク: ReCaptchaV2TaskProxyless
HTTPリクエスト n8n-nodes-base.httpRequest トークンをボディに含むターゲットURLへのPOST
If n8n-nodes-base.if $json.data に "recaptcha-success" が含まれているか確認
フィールド編集 n8n-nodes-base.set pageText = $json.data
結果を保存 n8n-nodes-base.executeCommand または任意のストレージノード 結果を保存(ファイル、DB、スプレッドシートなど)
Webhookに応答 n8n-nodes-base.respondToWebhook JSON、continueOnFail: true

CAPTCHAタスクタイプ

CAPTCHA n8n ノードの操作
reCAPTCHA v2(チェックボックス) reCAPTCHA v2
reCAPTCHA v2(インビジブル) reCAPTCHA v2
reCAPTCHA v3 reCAPTCHA v3
Cloudflare Turnstile Cloudflare Turnstile
Cloudflare Challenge Cloudflare Challenge
GeeTest V3 GeeTest V3
GeeTest V4 GeeTest V4
DataDome DataDome
AWS WAF AWS WAF
MTCaptcha MTCaptcha

結論

OpenClaw + n8n + CapSolverのパイプラインは、以下のようなプロダクショングレードのデータ抽出設定を提供します:

  • AIエージェントがWebhook経由で要求するときにオンデマンドで実行されます。
  • ブラウザやディスプレイは必要ありません。
  • CAPTCHA処理は完全に非表示になります — あなたやAIエージェントには見えません。

AIエージェントは単に「"extract data"」コマンドを発行し、クリーンなページコンテンツを受け取ります。CapSolverが難しい部分を処理し、n8nがフローを調整し、OpenClawがインターフェースとして機能します。


さっそく始めたいですか?CapSolverに登録し、初回チャージでOPENCLAWというボーナスコードを使用してください!


よくある質問

OpenClawにCapSolverやCAPTCHAについて伝える必要がありますか?

いいえ。OpenClawは単にHTTPリクエストを発火するスクリプトを実行するだけです。n8nがすべての処理を担当します。AIエージェントはCAPTCHAについて知らされていません — ただジョブをトリガーし、結果を読み取るだけです。

別のサイトに接続できますか?

はい、ただしURLだけを変更するだけではおそらくなりません。すべてのサイトはCAPTCHAトークンを異なる方法で送信します — 一部はフォームフィールド、一部はJSONボディ、一部はヘッダーまたはクッキーを使用します。上記の「ターゲットサイトにワークフローを適応させる」セクションを参照してください。

ターゲットがTurnstileを使用している場合どうなりますか?

CapSolverノードのタスクタイプを AntiTurnstileTaskProxyless に変更してください。その後、ターゲットのネットワークリクエストを確認して、Turnstileトークンがどこに送信されるかを確認してください — 通常は cf-turnstile-response という名前の隠しフォームフィールドに含まれますが、一部の実装ではJSONボディ、ヘッダー、またはクッキーに含まれることもあります。

どのくらいの結果が保存されますか?

保存方法に依存します。ローカルのJSONファイルでは、必要なだけ保存できます。Googleスプレッドシートやデータベースを使用する場合、実行ごとに無限に行が追加されます。Save Resultノードを、保存の必要に応じて設定してください。

クロニジョブからこのワークフローをトリガーできますか?

はい — Webhookエンドポイントは単なるHTTP POSTです。HTTPリクエストができるものであれば、すべてトリガーできます:

bash Copy
curl -s -X POST http://127.0.0.1:3005/webhook/openclaw/scrape

1回の抽出にどのくらいのコストがかかりますか?

1回の実行で1つのCapSolverクレジットが使われます。reCAPTCHA v2は最も安価なタイプの1つです。現在の料金はcapsolver.comで確認してください。

OpenClawは無料ですか?

OpenClawはオープンソースで、自己ホスト可能です。AIモデルプロバイダーのAPIクレジットとCapSolverのCAPTCHA解決用クレジットが必要です。

もっと見る

AIMar 27, 2026

企業自動化の向上:LLMを駆動とするインフラによるシームレスなCAPTCHA認識と運用効率

LLMを駆動するAIオートメーションインフラがCAPTCHA認識をどのように変革するかを発見してください。ビジネスプロセスの効率を向上させ、手動の介入を削減します。高度な検証ソリューションで自動化されたオペレーションを最適化してください。

Sora Fujimoto
Sora Fujimoto
AIMar 27, 2026

LLMトレーニングのためのデータ収集のスケーリング: CAPTCHAをスケールで解く

大規模言語モデルのトレーニングのためのデータ収集をスケールする方法を学びましょう。大規模にCAPTCHAを解くことで、AIモデル用の高品質なデータセットを構築するための自動化された戦略を発見しましょう。

目次

Anh Tuan
Anh Tuan
AIMar 24, 2026

CAPTCHAを解決する方法 OpenBrowserで CapSolverを使用して (AIエージェントオートメーションガイド)

OpenBrowserでCAPTCHAを解くためにCapSolverを使用してください。AIエージェント用にreCAPTCHA、Turnstileなど簡単に自動化します。

Sora Fujimoto
Sora Fujimoto
AIMar 24, 2026

HyperBrowserで任意のCAPTCHAを解く方法: CapSolverを使用したフルセットアップガイド

HyperBrowserで任意のCAPTCHAをCapSolverで解決。reCAPTCHA、Turnstile、AWS WAFなども簡単に自動化できます。

Sora Fujimoto
Sora Fujimoto