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

© 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リファレンス
  • ブログ
  • よくある質問
  • 用語集
  • ステータス

法務

  • 利用規約
  • プライバシーポリシー
  • 返金ポリシー
  • 個人情報を販売しない
ブログ/n8n/CapSolverを使用してn8nでGeeTest V3を解く方法:完全統合ガイド
Mar12, 2026

CapSolverを使用してn8nでGeeTest V3を解く方法:完全統合ガイド

Sora Fujimoto

Sora Fujimoto

AI Solutions Architect

GeeTest V3は、ウェブ上で最も広く展開されている行動型CAPTCHAの1つです。単純なチェックボックスチャレンジとは異なり、GeeTest V3はインタラクティブなパズル(スライドして検証、アイコン選択、単語マッチング)を使用して、人間とボットを区別します。アジアのログインページ、登録フォーム、データ量の多いサイトでよく見られ、世界中でますます普及しています。

再利用可能な解決APIを構築している場合でも、CAPTCHAで保護されたサイトからデータをスクレイピングしている場合でも、ログインフォームを自動化している場合でも、従来のコードを1行も書かずに、n8nワークフロー内でGeeTest V3を自動的に解決できたらどうでしょうか?

このガイドでは、n8n(ビジュアルワークフロー自動化ツール)と**CapSolver**(AIを活用したCAPTCHA解決サービス)を組み合わせて、GeeTest V3チャレンジをオンデマンドで解決する方法を学びます。これは、スタンドアロンのAPIエンドポイントとして、またはより大きな自動化ワークフロー内のステップとして機能します。

構築するもの:

解決API — 他のツールが呼び出すことができる再利用可能なエンドポイント:

  • GeeTest V3解決API

直接使用ワークフロー — より大きな自動化にステップとして埋め込まれたCapSolver:

  • GeeTest V3を解決し、保護されたページを取得し、価格変更を警告する価格および製品スクレーパー
  • 資格情報を送信する前にGeeTest V3を解決するアカウントログイン自動化

GeeTest V3とは?

GeeTest V3は、インタラクティブなタスクを通じてユーザーを検証するチャレンジ応答CAPTCHAシステムです。reCAPTCHA(単一のトークンを使用)やCloudflare Turnstile(目に見えない形で実行)とは異なり、GeeTest V3はユーザーの操作を必要とする目に見えるパズルを提示します。

  • スライドパズル — スライダーをドラッグしてパズルのピースを完成させます
  • アイコンクリック — 正しい順序で特定のアイコンをクリックします
  • 単語マッチング — プロンプトに一致する文字を選択します

解決の観点から見ると、GeeTest V3には2つの重要なパラメーターがあります。

  • gt — サイトごとの識別子(サイトキーのようなもの)。これは静的です。セッション間で変更されません。
  • challenge — セッションごとのトークン。これは動的です。毎回変更され、約60〜120秒で期限切れになります。

この動的なchallengeパラメーターは、他のCAPTCHAタイプとの重要な違いです。GeeTest V3を解決するすべてのワークフローには、CapSolverに送信する前に新しいチャレンジを取得するための追加のステップが必要です。

解決形式: 単一のトークンを返すreCAPTCHAやTurnstileとは異なり、GeeTest V3は3つの個別の値を返します。

  • challenge — 解決されたチャレンジ文字列
  • validate — 検証ハッシュ
  • seccode — セキュリティコード

これらは、geetest_challenge、geetest_validate、geetest_seccodeの3つのフォームフィールドとして送信されます。

GeeTest V3 vs V4: GeeTest V4は異なるAPI構造(gtの代わりにcaptcha_id、個別のchallenge取得なし)を使用します。このガイドはGeeTest V3に特化しています。ページソースにcaptcha_idが表示されている場合は、V4を扱っています。


前提条件

始める前に、次のものがあることを確認してください。

  1. n8nインスタンス — セルフホストまたはn8n Cloud
  2. CapSolverアカウント — こちらで登録してAPIキーを取得してください
  3. CapSolver n8nノード — n8nの公式ノードとしてすでに利用可能(インストール不要)

重要: CapSolverアカウントに十分な残高があることを確認してください。GeeTest V3解決タスクは使用量に基づいてクレジットを消費します。


n8nでのCapSolverのセットアップ

CapSolverはn8nの公式統合として利用可能であり、コミュニティノードのインストールは不要です。ワークフローを構築する際に、ノードパネルで直接見つけることができます。

公式統合であるため、CapSolverノードがアカウントで認証できるように、n8nで資格情報を作成する必要があります。

ステップ1:資格情報ページを開く

n8nインスタンスに移動し、Settings -> Credentialsに移動します。ここに設定されているすべての資格情報が表示されます。

CapSolverアカウントを表示するn8n資格情報ページ

ステップ2:CapSolver資格情報を作成する

  1. Create credential(右上)をクリックします
  2. **「CapSolver」**を検索し、CapSolver APIを選択します
  3. APIキーを入力します — CapSolverダッシュボードから直接コピーします
  4. Allowed HTTP Request DomainsはAll(デフォルト)のままにします
  5. Saveをクリックします

n8nは自動的に接続をテストします。APIキーが有効であることを確認する緑色のバナー**「Connection tested successfully」**が表示されるはずです。

接続テストが成功したCapSolver資格情報設定

重要: ワークフロー内のすべてのCapSolverノードは、この資格情報を参照します。一度作成するだけで済みます。すべての解決ワークフローは同じ資格情報を共有します。

これで、GeeTest V3解決ワークフローを構築する準備が整いました!


GeeTest V3パラメーターを特定する方法

GeeTest V3チャレンジを解決する前に、**gtパラメーター、チャレンジAPIエンドポイント、およびchallenge**値が動的に取得される方法の3つを見つける必要があります。

方法1:開発者ツールのネットワークタブ

  1. 開発者ツール(F12)-> ネットワークタブを開きます
  2. ページでGeeTestチャレンジをトリガーします
  3. URLにgt=を含むリクエスト、または"gt"と"challenge"フィールドを含むレスポンスを探します
  4. 一般的なエンドポイントパターン:
    • /api/geetest/register
    • /gt/register-slide
    • /captcha?gt=...
  5. レスポンスは通常次のようになります。
json Copy
{
  "gt": "81dc9bdb52d04dc20036dbd8313ed055",
  "challenge": "4a8a08f09d37b73795649038408b5f33ab",
  "success": 1,
  "new_captcha": true
}

動的なチャレンジを理解する

これはGeeTest V3自動化にとって最も重要な概念です。

  • **gt**値はサイトごとに静的です。セッション間で同じままです
  • **challenge**値は動的です。毎回変更され、約60〜120秒で期限切れになります
  • CapSolverに解決リクエストを送信する直前に、新しいchallengeを取得する必要があります
  • チャレンジAPIエンドポイントはサイト固有です(例:https://example.com/api/geetest/register)

これは、すべてのGeeTest V3ワークフローが、新しいチャレンジを取得するためにCapSolverノードの前に追加のHTTPリクエストノードを必要とすることを意味します。これは、reCAPTCHAまたはTurnstileワークフローとの主要な構造上の違いです。

ヒント: キャッシュを防ぎ、常に新しいチャレンジを取得するために、?t={{ Date.now() }}をチャレンジAPI URLにパラメーターとして追加します。

CAPTCHAパラメーターを特定する方法の詳細なガイドについては、CapSolver公式ドキュメントを参照してください。


ワークフロー:GeeTest V3解決API

このワークフローは、GeeTest V3パラメーターを受け入れ、解決されたチャレンジを返すPOSTエンドポイントを作成します。reCAPTCHAまたはTurnstileソルバーとは異なり、呼び出し元はgtおよびwebsiteURLとともに(新しく取得した)challenge値を提供する必要があります。

n8nでのGeeTest V3解決ワークフロー

仕組み

ワークフローは4つのノードで構成されています。

  1. Webhook — GeeTest V3パラメーターを含む受信POSTリクエストを受け取ります
  2. GeeTest V3 — チャレンジをCapSolverに送信し、解決を待ちます
  3. CapSolverエラー? — 解決が失敗したかどうか($json.errorが空ではない)に基づいて分岐するIFノード
  4. Webhookに応答 — 成功した場合は解決策を返し、失敗した場合は{"error": "..."}を返します

ノード設定

1. Webhookノード

設定 値
HTTPメソッド POST
パス solver-geetest-v3
応答 Response Node

これにより、https://your-n8n-instance.com/webhook/solver-geetest-v3にエンドポイントが作成されます。

2. CapSolver GeeTest V3ノード

パラメーター 値 説明
操作 GeeTest V3 GeeTest V3に設定する必要があります
タイプ GeeTestTaskProxyLess 利用可能な唯一のオプション — プロキシなしのバリアント
ウェブサイトURL ={{ $json.body.websiteURL }} GeeTestチャレンジがあるページのURL
GT ={{ $json.body.gt }} サイトごとのGeeTest識別子
チャレンジ ={{ $json.body.challenge }} セッションごとの動的なチャレンジ(新しいものである必要があります)
GeeTest APIサーバーサブドメイン (オプション) サイトがカスタムGeeTest APIサーバーを使用している場合

ノードでCapSolver資格情報も選択します。

3. CapSolverエラー?ノード(IF)

設定 値
条件 ={{ $json.error }} が空ではない
Trueブランチ エラー Webhookに応答ノードにルーティングします
Falseブランチ 成功 Webhookに応答ノードにルーティングします

これにより、エラーパスがキャンバス上で明示的になります。CapSolverノードはエラーが発生しても続行するため(onError: continueRegularOutput)、失敗はワークフローをクラッシュさせるのではなく、{ "error": "..." }としてここに到達します。

4. Webhookに応答ノード

成功ブランチ(CapSolverエラー?のFalse出力):

設定 値
応答形式 JSON
応答本文 ={{ JSON.stringify($json.data) }}

試してみる

WebhookエンドポイントにPOSTリクエストを送信します。

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solver-geetest-v3 \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "gt": "81dc9bdb52d04dc20036dbd8313ed055",
    "challenge": "4a8a08f09d37b73795649038408b5f33ab"
  }'

期待される応答:

json Copy
{
  "taskId": "abc123...",
  "solution": {
    "challenge": "4a8a08f09d37b73795649038408b5f33",
    "validate": "68f0c05d0c8a8b2b1e2f3a4b5c6d7e8f",
    "seccode": "68f0c05d0c8a8b2b1e2f3a4b5c6d7e8f|jordan"
  },
  "status": "ready"
}

重要: リクエスト本文のchallengeは新しく取得されたものである必要があります。期限切れのチャレンジを送信すると、CapSolverはそれを解決できません。チャレンジは通常60〜120秒で期限切れになります。

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

以下のJSONをコピーし、Menu -> Import from JSONからn8nにインポートします。

ワークフローJSONを展開するにはクリックしてください
json Copy
{
  "name": "GeeTest V3 Scraping — Price & Product Details — CapSolver + Schedule + Webhook",
  "nodes": [
    {
      "parameters": {
        "content": "## GeeTest V3スクレイピング — 価格と製品の詳細 — CapSolver + スケジュール + Webhook\n\n**対象者:** GeeTest V3で保護されたサイトの価格や製品データを監視するチーム。\n\n**機能:** GeeTest V3を解決し、製品ページを取得し、CSSセレクターを介して価格と名前を抽出し、保存された値と比較して変更を警告します。\n\n**仕組み:**\n1. スケジューラー(6時間ごと)またはWebhookがフローをトリガーします\n2. CapSolverがGeeTest V3チャレンジを解決します\n3. HTTPリクエストが解決されたトークンで製品ページを取得します\n4. HTMLノードが製品の価格と名前を抽出します\n5. コードノードが現在の価格を保存された価格と比較します → 変更を警告します\n\n**セットアップ:**\n1. **Settings → Credentials**でCapSolver APIキーを追加します\n2. プレースホルダーURLとサイトキーを置き換えます\n3. ターゲットページに合わせて、Extract DataのCSSセレクターを更新します\n4. Build Alertの出力を通知チャネルに接続します",
        "height": 560,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1220,
        -380
      ],
      "id": "sticky-blog-main-1773678228108-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "### スケジュールパス\n6時間ごとに自動的に実行されます。\n結果は、実行間の比較のためにワークフローの静的データに保存されます。",
        "height": 480,
        "width": 2200,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -740,
        -280
      ],
      "id": "sticky-blog-section-1773678228108-2",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "### Webhookパス\nオンデマンドトリガー — 同じロジックで、結果をJSON応答として返します。",
        "height": 480,
        "width": 2200,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -740,
        140
      ],
      "id": "sticky-blog-section-1773678228108-3",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -700,
        0
      ],
      "id": "88888888-8888-8888-8888-888888888801",
      "name": "Every 6 Hours"
    },
    {
      "parameters": {
        "url": "https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        -400,
        0
      ],
      "id": "88888888-8888-8888-8888-888888888802",
      "name": "Fetch GeeTest Challenge"
    },
    {
      "parameters": {
        "operation": "GeeTest V3",
        "websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
        "gt": "={{ $json.gt }}",
        "challenge": "={{ $json.challenge }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "88888888-8888-8888-8888-888888888803",
      "name": "Solve GeeTest V3",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://YOUR-TARGET-SITE.com/product-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": "geetest_challenge",
              "value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.challenge }}"
            },
            {
              "name": "geetest_validate",
              "value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.validate }}"
            },
            {
              "name": "geetest_seccode",
              "value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.seccode }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "88888888-8888-8888-8888-888888888804",
      "name": "Fetch Product Page"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price",
              "returnValue": "text",
              "returnArray": false
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title",
              "returnValue": "text",
              "returnArray": false
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        0
      ],
      "id": "88888888-8888-8888-8888-888888888805",
      "name": "Extract Data"
    },
    {
      "parameters": {
        "jsCode": "// Get current and previous price from workflow static data\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || \'Product\';\n\n// Parse numeric values for comparison\nconst parsePrice = (str) => {\n  if (!str) return null;\n  const match = str.match(/[\\d,]+\\.?\\d*/);\n  return match ? parseFloat(match[0].replace(\'\', \'\')) : null;\n};\n\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\n\n// Update stored price\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? \'dropped\' : \'increased\') : \'unchanged\';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : \'0\';\n\nreturn [{\n  json: {\n    productName,\n    currentPrice,\n    previousPrice: previousPrice || \'first check\',\n    changed,\n    direction,\n    diff: changed ? `\\$${diff}` : null,\n    checkedAt: new Date().toISOString()\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        0
      ],
      "id": "88888888-8888-8888-8888-888888888806",
      "name": "Compare Data"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "price-if-001",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        0
      ],
      "id": "88888888-8888-8888-8888-888888888807",
      "name": "Data Changed?"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "alert-001",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === \'dropped\' ? \'-\' : \'+\' }}{{ $json.diff }})",
              "type": "string"
            },
            {
              "id": "alert-002",
              "name": "severity",
              "value": "={{ $json.direction === \'dropped\' ? \'deal\' : \'info\' }}",
              "type": "string"
            },
            {
              "id": "alert-003",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        -80
      ],
      "id": "88888888-8888-8888-8888-888888888808",
      "name": "Build Alert"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "nc-001",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "nc-002",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "nc-003",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        128
      ],
      "id": "88888888-8888-8888-8888-888888888809",
      "name": "No Change"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "price-monitor-geetest-v3",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -700,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888810",
      "name": "Webhook Trigger",
      "webhookId": "88888888-aaaa-bbbb-cccc-888888888810",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        -400,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888811",
      "name": "Fetch GeeTest Challenge [Webhook]"
    },
    {
      "parameters": {
        "operation": "GeeTest V3",
        "websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
        "gt": "={{ $json.gt }}",
        "challenge": "={{ $json.challenge }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888812",
      "name": "Solve GeeTest V3 [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://YOUR-TARGET-SITE.com/product-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": "geetest_challenge",
              "value": "={{ $(\'Solve GeeTest V3 [Webhook]\').item.json.data.solution.challenge }}"
            },
            {
              "name": "geetest_validate",
              "value": "={{ $(\'Solve GeeTest V3 [Webhook]\').item.json.data.solution.validate }}"
            },
            {
              "name": "geetest_seccode",
              "value": "={{ $(\'Solve GeeTest V3 [Webhook]\').item.json.data.solution.seccode }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888813",
      "name": "Fetch Product Page [Webhook]"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "sourceData": "json",
        "dataPropertyName": "data",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price",
              "returnValue": "text",
              "returnArray": false
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title",
              "returnValue": "text",
              "returnArray": false
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888814",
      "name": "Extract Data [Webhook]"
    },
    {
      "parameters": {
        "jsCode": "// Get current and previous price from workflow static data\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || \'Product\';\n\n// Parse numeric values for comparison\nconst parsePrice = (str) => {\n  if (!str) return null;\n  const match = str.match(/[\\d,]+\\.?\\d*/);\n  return match ? parseFloat(match[0].replace(\'\', \'\')) : null;\n};\n\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\n\n// Update stored price\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? \'dropped\' : \'increased\') : \'unchanged\';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : \'0\';\n\nreturn [{\n  json: {\n    productName,\n    currentPrice,\n    previousPrice: previousPrice || \'first check\',\n    changed,\n    direction,\n    diff: changed ? `\\$${diff}` : null,\n    checkedAt: new Date().toISOString()\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888815",
      "name": "Compare Data [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "price-if-002",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888816",
      "name": "Data Changed? [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "alert-004",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === \'dropped\' ? \'-\' : \'+\' }}{{ $json.diff }})",
              "type": "string"
            },
            {
              "id": "alert-005",
              "name": "severity",
              "value": "={{ $json.direction === \'dropped\' ? \'deal\' : \'info\' }}",
              "type": "string"
            },
            {
              "id": "alert-006",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        340
      ],
      "id": "88888888-8888-8888-8888-888888888817",
      "name": "Build Alert [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "nc-004",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "nc-005",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "nc-006",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1408,
        548
      ],
      "id": "88888888-8888-8888-8888-888888888818",
      "name": "No Change [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1712,
        420
      ],
      "id": "88888888-8888-8888-8888-888888888819",
      "name": "Respond to Webhook [Webhook]"
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Fetch GeeTest Challenge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch GeeTest Challenge": {
      "main": [
        [
          {
            "node": "Solve GeeTest V3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V3": {
      "main": [
        [
          {
            "node": "Fetch Product Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page": {
      "main": [
        [
          {
            "node": "Extract Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data": {
      "main": [
        [
          {
            "node": "Compare Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data": {
      "main": [
        [
          {
            "node": "Data Changed?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed?": {
      "main": [
        [
          {
            "node": "Build Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Fetch GeeTest Challenge [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch GeeTest Challenge [Webhook]": {
      "main": [
        [
          {
            "node": "Solve GeeTest V3 [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V3 [Webhook]": {
      "main": [
        [
          {
            "node": "Fetch Product Page [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page [Webhook]": {
      "main": [
        [
          {
            "node": "Extract Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data [Webhook]": {
      "main": [
        [
          {
            "node": "Compare Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data [Webhook]": {
      "main": [
        [
          {
            "node": "Data Changed? [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed? [Webhook]": {
      "main": [
        [
          {
            "node": "Build Alert [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Alert [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Change [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

ワークフロー:アカウントログイン自動化 — GeeTest V3を解決して資格情報を送信

このワークフローは、GeeTest V3で保護されたログインフォームの送信を最初から最後まで自動化します。資格情報を送信する前にGeeTest V3チャレンジを解決します。

仕組み

このワークフローは5つのノードで構成されています。

  1. Webhook — ログイン自動化をトリガーする受信POSTリクエストを受け取ります
  2. GeeTestチャレンジの取得 — ターゲットサイトにHTTPリクエストを実行して、新しいchallenge値を取得します
  3. GeeTest V3の解決 — gt、challenge、websiteURLをCapSolverに送信します
  4. ログインフォームの送信 — 解決されたGeeTest V3トークンと資格情報を含むHTTP POSTリクエストをターゲットサイトに実行します
  5. Webhookに応答 — ログイン結果を返します

ノード設定

1. Webhookノード

設定 値
HTTPメソッド POST
パス login-geetest-v3
応答 Response Node

これにより、https://your-n8n-instance.com/webhook/login-geetest-v3にエンドポイントが作成されます。

2. GeeTestチャレンジの取得(HTTPリクエスト)

設定 値
URL https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}
オプション Full Response = false

これにより、gtとchallengeの値を含むJSON応答が返されます。

3. GeeTest V3の解決(CapSolver)

パラメーター 値
操作 GeeTest V3
ウェブサイトURL https://YOUR-TARGET-SITE.com/login
GT ={{ $json.gt }}
チャレンジ ={{ $json.challenge }}

CapSolver資格情報も選択します。

4. ログインフォームの送信(HTTPリクエスト)

設定 値
メソッド POST
URL https://YOUR-TARGET-SITE.com/login
コンテンツタイプ form-urlencoded
本文パラメーター username=YOUR_USERNAME、password=YOUR_PASSWORD、geetest_challenge={{ $(\'Solve GeeTest V3\').item.json.data.solution.challenge }}、geetest_validate={{ $(\'Solve GeeTest V3\').item.json.data.solution.validate }}、geetest_seccode={{ $(\'Solve GeeTest V3\').item.json.data.solution.seccode }}

重要: YOUR_USERNAMEとYOUR_PASSWORDを実際の資格情報に置き換えてください。また、ターゲットサイトのHTMLに合わせてフォームフィールド名を調整する必要がある場合があります。

5. Webhookに応答(成功/失敗)

設定 値
応答形式 JSON
応答本文 ={{ JSON.stringify($json) }}

試してみる

WebhookエンドポイントにPOSTリクエストを送信します。

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/login-geetest-v3 \
  -H "Content-Type: application/json" \
  -d ''

期待される応答(成功):

json Copy
{
  "status": "success",
  "message": "Login successful",
  "solution": {
    "challenge": "...",
    "validate": "...",
    "seccode": "..."
  }
}

期待される応答(失敗):

json Copy
{
  "status": "failed",
  "message": "Login failed: Invalid credentials or captcha",
  "error": "..."
}

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

以下のJSONをコピーし、Menu -> Import from JSONからn8nにインポートします。

ワークフローJSONを展開するにはクリックしてください
json Copy
{
  "name": "Account Login Automation — Solve GeeTest V3 & Submit Credentials",
  "nodes": [
    {
      "parameters": {
        "content": "## アカウントログイン自動化 — GeeTest V3を解決して資格情報を送信\n\n**対象者:** GeeTest V3で保護されたアカウントへのログインを自動化する必要があるチーム。\n\n**機能:** GeeTest V3チャレンジを取得し、CapSolverで解決し、解決されたトークンとユーザー資格情報でログインフォームを送信します。\n\n**仕組み:**\n1. Webhookがフローをトリガーします\n2. HTTPリクエストが新しいGeeTest V3チャレンジを取得します\n3. CapSolverがチャレンジを解決します\n4. HTTPリクエストが、解決されたGeeTest V3トークンとユーザー資格情報を含むログインフォームを送信します\n5. Webhookがログイン結果を返します\n\n**セットアップ:**\n1. **Settings → Credentials**でCapSolver APIキーを追加します\n2. プレースホルダーURLと資格情報を置き換えます\n3. ターゲットサイトに合わせてフォームフィールド名を調整します\n4. ワークフローをアクティブ化します",
        "height": 480,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1020,
        -280
      ],
      "id": "sticky-login-main-1773678228108-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "login-geetest-v3",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -700,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999901",
      "name": "Webhook Trigger",
      "webhookId": "99999999-aaaa-bbbb-cccc-999999999901",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        -400,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999902",
      "name": "Fetch GeeTest Challenge"
    },
    {
      "parameters": {
        "operation": "GeeTest V3",
        "websiteURL": "https://YOUR-TARGET-SITE.com/login",
        "gt": "={{ $json.gt }}",
        "challenge": "={{ $json.challenge }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999903",
      "name": "Solve GeeTest V3",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://YOUR-TARGET-SITE.com/login",
        "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": "username",
              "value": "YOUR_USERNAME"
            },
            {
              "name": "password",
              "value": "YOUR_PASSWORD"
            },
            {
              "name": "geetest_challenge",
              "value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.challenge }}"
            },
            {
              "name": "geetest_validate",
              "value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.validate }}"
            },
            {
              "name": "geetest_seccode",
              "value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.seccode }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999904",
      "name": "Submit Login Form"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        512,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999905",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Fetch GeeTest Challenge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch GeeTest Challenge": {
      "main": [
        [
          {
            "node": "Solve GeeTest V3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V3": {
      "main": [
        [
          {
            "node": "Submit Login Form",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Login Form": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

トラブルシューティング

「GeeTest V3アクセスが見つかりません」

このエラーは、CapSolverアカウントまたはプランにGeeTest V3へのアクセスが含まれていないことを意味します。プランにこのサービスが含まれているかどうかを確認するには、CapSolverダッシュボードを確認してください。

「チャレンジの期限切れ」または「チャレンジが無効です」

GeeTest V3のchallenge値は動的であり、すぐに期限切れになります(通常60〜120秒以内)。CapSolverに解決リクエストを送信する直前に、新しいchallengeを取得する必要があります。ワークフローが、解決の試行ごとに最新のchallengeを取得していることを確認してください。

「ウェブサイトURLが無効です」または「GTパラメーターが無効です」

これらのエラーは、CapSolverノードで提供したwebsiteURLまたはgtパラメーターが正しくないことを示しています。ターゲットサイトの開発者ツールのネットワークタブを再確認して、正しい値を使用していることを確認してください。

GeeTest V3が解決されてもログインに失敗する

GeeTest V3が正常に解決されたにもかかわらずログインに失敗する場合は、次の問題が考えられます。

  • 誤った資格情報:ログインフォームで送信したユーザー名とパスワードを再確認してください。
  • セッションの不一致:ログインプロセスにセッションまたはCookieが含まれる場合は、GeeTestチャレンジの取得とログインフォームの送信の間で同じセッションを維持していることを確認してください。
  • その他のフォームフィールド:ターゲットサイトでは、ログインを成功させるために追加の非表示フィールド、CSRFトークン、またはその他のパラメーターが必要になる場合があります。フォームのHTMLを調べて、必要なその他のフィールドを特定してください。
  • ユーザーエージェント:一部のサイトでは、ユーザーエージェント文字列に基づいてリクエストを拒否する場合があります。HTTPリクエストで一般的なブラウザのユーザーエージェントを設定してみてください。

「CapSolver資格情報が無効です」

このエラーは、n8nで設定したCapSolver APIキーが正しくないか、期限切れになっていることを示しています。CapSolverダッシュボードを確認し、n8nの資格情報を更新してください。


ベストプラクティス

  1. 常に新しいチャレンジを取得する:GeeTest V3解決の試行ごとに、常にターゲットサイトにHTTPリクエストを実行して、最新のchallenge値を取得します。チャレンジはすぐに期限切れになります。
  2. セッションを維持する:ターゲットサイトがセッションまたはCookieを使用している場合は、チャレンジの取得とフォームの送信の間で同じセッションを維持していることを確認してください。n8nでは、HTTPリクエストノードを使用してCookieを処理できます。
  3. パラメーターを検証する:gt、websiteURL、challengeパラメーターが正しいことを再確認してください。これらはGeeTest V3解決の成功の鍵となります。
  4. エラーを処理する:解決またはログインの失敗を適切に処理するために、ワークフローにエラー処理ロジックを含めます。これには、再試行メカニズムや通知が含まれる場合があります。
  5. 適切なユーザーエージェントを使用する:サイトによってブロックされないように、すべてのHTTPリクエストで一般的なブラウザのユーザーエージェント文字列を設定します。
  6. テストと反復:GeeTest V3の実装はサイトによって異なる場合があります。小さく始めて、ワークフローをテストし、特定のターゲットで確実に機能するように必要に応じて反復してください。
  7. プロキシは不要:他のCAPTCHAタイプとは異なり、GeeTest V3の解決には通常プロキシは必要ありません。CapSolverはプロキシ要件を内部的に処理します。

始める準備はできましたか? CapSolverに登録し、ボーナスコードn8nを使用して、最初のチャージで8%の追加ボーナスを獲得してください。

CapSolverボーナスコードバナー

結論

n8nとCapSolverを使用して、GeeTest V3解決APIとアカウントログイン自動化ワークフローを構築する方法を学びました。

まとめ:

  • GeeTest V3の仕組み — インタラクティブなパズルを使用し、静的なgtパラメーターと動的なchallengeパラメーターに依存します。
  • GeeTest V3パラメーターの特定方法 — 開発者ツールのネットワークタブを使用して、gtとチャレンジAPIエンドポイントを見つけます。
  • 動的なチャレンジの重要性 — 解決の試行ごとに新しいchallenge値を取得する必要があります。
  • 解決APIエンドポイント — GeeTest V3パラメーターを受け入れ、解決されたチャレンジを返します。
  • アカウントログイン自動化ワークフロー — 資格情報を送信する前にGeeTest V3を解決します。
  • トラブルシューティングのヒント — 期限切れのチャレンジ、無効なパラメーター、ログイン失敗などの一般的なエラーを処理します。
  • ベストプラクティス — 常に新しいチャレンジを取得し、セッションを維持し、パラメーターを検証し、エラーを処理します。

GeeTest V3の主な複雑さは、その動的なchallengeパラメーターと3部構成の解決形式にあります。CapSolverノードの前にHTTPリクエストノードを追加して新しいチャレンジを取得することで、GeeTest V3の解決を効果的に自動化できます。その後、これらの解決されたトークンをログインまたはスクレイピングワークフローにシームレスに統合できます。

ヒント: これらのワークフローはWebhookトリガーを使用しますが、トリガーノードを他のn8nトリガー(手動、アプリケーションイベント、フォーム送信など)と交換できます。GeeTest V3が解決されたら、n8nの組み込みノードを使用して、結果をGoogleスプレッドシート、データベース、クラウドストレージに保存したり、Telegram/Slack/メールでアラートを送信したりできます。


よくある質問

GeeTest V3とは?

GeeTest V3は、インタラクティブなパズル(スライドパズル、アイコンクリック、単語マッチングなど)を通じてユーザーを検証する行動型CAPTCHAシステムです。静的なgtパラメーターと、すぐに期限切れになる動的なchallengeパラメーターを使用します。

GeeTest V3とGeeTest V4の違いは何ですか?

GeeTest V4は、gtの代わりにcaptcha_idを使用するなど、異なるAPI構造を使用し、個別のchallenge取得は必要ありません。このガイドはGeeTest V3に特化しています。ページソースにcaptcha_idが表示されている場合は、V4を扱っています。

GeeTest V3チャレンジを解決するのにどれくらいの費用がかかりますか?

価格は使用量によって異なります。GeeTest V3の現在の価格については、CapSolverの価格ページを確認してください。GeeTest V3解決タスクは、単純な画像からテキストへの認識よりも高価ですが、他の複雑なCAPTCHAタイプよりも安価です。

GeeTest V3チャレンジを解決するのにどれくらいの時間がかかりますか?

GeeTest V3解決タスクは、チャレンジの複雑さとCapSolverサーバーの負荷に応じて、通常10〜30秒かかります。ImageToTextTaskとは異なり、GeeTest V3解決にはタスクの作成とポーリングが含まれるため、即座には返されません。

GeeTest V3にプロキシは必要ですか?

CapSolverのGeeTest V3解決サービスは、通常、プロキシを提供する必要はありません。CapSolverはプロキシ要件を内部的に処理します。websiteURL、gt、challengeパラメーターを提供するだけで済みます。

なぜ私のchallenge値は常に期限切れになるのですか?

GeeTest V3のchallenge値は動的であり、すぐに期限切れになります(通常60〜120秒以内)。CapSolverに解決リクエストを送信する直前に、新しいchallengeを取得する必要があります。ワークフローが、解決の試行ごとに最新のchallengeを取得するためにHTTPリクエストノードを含んでいることを確認してください。

GeeTest V3が正常に解決されたのにログインに失敗した場合はどうすればよいですか?

GeeTest V3が正常に解決されたにもかかわらずログインに失敗した場合は、次の点を確認してください。

  • 資格情報:正しいユーザー名とパスワードを送信したことを確認してください。
  • セッション/Cookie:チャレンジの取得とログインフォームの送信の間で同じセッションとCookieを維持していることを確認してください。
  • その他のフォームフィールド:HTMLフォームを調べて、必要な非表示フィールドまたはCSRFトークンがあるかどうかを確認してください。
  • ユーザーエージェント:HTTPリクエストで一般的なブラウザのユーザーエージェント文字列を設定してみてください。

このワークフローはn8n Cloudで使用できますか?

はい。このワークフローは、セルフホスト型n8nとn8n Cloudの両方で機能します。CapSolverノードはすでに公式統合として利用可能です。API資格情報を追加するだけで済みます。

もっと見る

n8nMar 09, 2026

CapSolver と n8n を使った reCAPTCHA v2/v3 の解決方法

CapSolverとn8nを使用してeCAPTCHA v2/v3ソルバーAPIを構築します。トークンの自動取得、ウェブサイトへの送信、保護されたデータの抽出をノーコードで自動化する方法を学びます。

Sora Fujimoto
Sora Fujimoto
n8nMar 16, 2026

CapSolverとn8nを使用してImageToTextを解決する方法

画像からテキストへの変換、CAPTCHAソルバー、OCR CAPTCHA、CAPTSOVER、N8N、N8Nワークフロー、自動化、OCR API、CAPTCHA 自動化、Base64 画像、画像認識、AI OCR、Webhook、スケジュール済みワークフロー、フォーム自動化、CAPTCHAバイパス、セッション処理、プロキシなしCAPTCHA、インスタントOCR、テキスト認識

目次

Lucas Mitchell
Lucas Mitchell
n8nMar 12, 2026

CapSolverを使用してn8nでGeeTest V4を解く方法:完全統合ガイド

CapSolverをn8nと統合してGeeTest V4を解決し、信頼性の高い自動化ワークフローを構築する方法を学びましょう。

Nikolai Smirnov
Nikolai Smirnov
n8nMar 17, 2026

n8nでのCapSolverの使い方: ワークフローでCAPTCHAを解くための完全なガイド

CapSolverをn8nと連携させてCAPTCHAを解き、信頼性のあるオートメーションワークフローを簡単に構築する方法を学びましょう。

Sora Fujimoto
Sora Fujimoto