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

© 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 V4を解く方法:完全統合ガイド
Mar12, 2026

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

Nikolai Smirnov

Nikolai Smirnov

Software Development Lead

GeeTest V4は、GeeTestの行動CAPTCHAシステムの最新世代であり、ログインフォーム、登録ページ、データエンドポイントを保護するために、ますます多くのウェブサイトで使用されています。画像パズルに依存する古いCAPTCHAシステムとは異なり、GeeTest V4は適応型チャレンジと行動分析を使用しており、自動化ワークフローで遭遇するより洗練された保護の1つとなっています。

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

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

構築するもの:

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

  • GeeTest V4ソリューションAPI

直接使用ワークフロー — CapSolverをより大きな自動化内のステップとして埋め込む:

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

GeeTest V4とは?

GeeTest V4は、GeeTestのCAPTCHAプラットフォームの最新バージョンです。これは、簡素化された統合モデルと強化された行動検出により、以前のV3システムを置き換えます。解決の観点から見ると、V4はV3よりも構造的にシンプルです。V3が必要とする動的なチャレンジフローではなく、静的なcaptchaIdパラメーターのみを必要とします。

GeeTest V3との主な違い:

機能 GeeTest V3 GeeTest V4
主要パラメーター gt + 動的challenge captchaId(静的)
チャレンジの取得 必須 — 最初にGeeTest APIを呼び出す必要がある 不要 — captchaIdは静的
ソリューションフィールド 3 (challenge, validate, seccode) 5 (captcha_id, lot_number, pass_token, gen_time, captcha_output)
ウィジェットスクリプト gt.js gcaptcha4.js
タスクタイプ GeeTestTask / GeeTestTaskProxyLess GeeTestTaskProxyLessのみ

V4の主な利点: captchaIdはページソースコードに埋め込まれており、変更されることはありません。一度見つければ、永久に使用できます。動的なチャレンジ取得がないということは、ワークフローのノードが少ないことを意味します。


前提条件

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

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

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


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 V4ソリューションワークフローを構築する準備が整いました!


GeeTest V4パラメーターを識別する方法

GeeTest V4 CAPTCHAを解決する前に、その**captchaId(唯一の必須パラメーター)を見つける必要があります。GeeTest V3(動的なchallengeの取得が必要)とは異なり、V4のcaptchaIdは静的**であり、ページソースコードに直接埋め込まれています。

方法1:ページソースコードを検査する

  1. ソースの表示(Ctrl+U)を開くか、DevToolsのElementsタブを使用します
  2. ページソースコードでcaptcha_idまたはcaptchaIdを検索します
  3. GeeTest V4ウィジェットスクリプトであるgcaptcha4.jsへの参照を探します
  4. captchaIdは通常、ウィジェットの初期化時に構成パラメーターとして渡されます
html Copy
<!-- 例:ページソースコードでのGeeTest V4の初期化 -->
<script>
  initGeetest4({
    captchaId: 'e392e1d7fd421dc63325744d5a2b9c73',
    product: 'bind'
  });
</script>

方法2:DevToolsのネットワークタブ

  1. DevTools(F12)> Networkタブを開きます
  2. gcaptcha4またはgeetestでリクエストをフィルタリングします
  3. gcaptcha4.geetest.comへのリクエストを探します。captcha_idパラメーターはクエリ文字列にあります

V4の主な利点: captchaIdは静的です。一度見つければ、毎回新しいチャレンジを取得する必要なく、無期限に使用できます。これにより、V4ワークフローはTurnstileワークフローと構造的に同一になります。


ワークフロー:GeeTest V4ソリューションAPI

このワークフローは、GeeTest V4パラメーターを受け入れ、解決されたトークンのセットを返すPOST APIエンドポイントを作成します。

仕組み

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

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

ノード設定

1. Webhookノード

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

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

2. CapSolver GeeTest V4ノード

パラメーター 値 説明
操作 GeeTest V4 GeeTest V4に設定する必要があります
タイプ GeeTestTaskProxyLess 利用可能な唯一のタスクタイプ(プロキシバリアントなし)
ウェブサイトURL {{ $json.body.websiteURL }} GeeTest V4ウィジェットがあるページのURL
Captcha ID {{ $json.body.captchaId }} 静的なGeeTest V4 captcha ID
GeeTest APIサーバーサブドメイン (オプション) サイトが使用している場合はカスタムGeeTest APIサーバー

このノードでCapSolver資格情報を選択してください。オプションのgeetestApiServerSubdomainパラメーターはめったに必要ありません。ターゲットサイトでデフォルトのGeeTestサーバーが機能しない場合にのみ追加してください。

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

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

4. Webhook応答ノード

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

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

試してみる

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

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solver-geetest-v4 \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "captchaId": "e392e1d7fd421dc63325744d5a2b9c73"
  }'

期待される応答:

json Copy
{
  "taskId": "abc123...",
  "solution": {
    "captcha_id": "e392e1d7fd421dc63325744d5a2b9c73",
    "lot_number": "7c18c041a6ed4e...",
    "pass_token": "d88ce40c0a5c5a18...",
    "gen_time": "1709123456",
    "captcha_output": "dGVzdF9jYXB0Y2hh..."
  },
  "status": "ready"
}

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

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

クリックしてワークフローJSONを展開
json Copy
{
  "name": "GeeTest V4 — Solver API",
  "nodes": [
    {
      "parameters": {
        "content": "## GeeTest V4 — ソルバーAPI\n\n**対象者:** GeeTest V4チャレンジをシンプルなPOSTエンドポイント経由で解決する必要がある開発者。\n\n**機能:** captchaパラメーターを受け入れ、CapSolverでチャレンジを解決し、トークンまたはエラーをJSONとして返すwebhookを公開します。\n\n**仕組み:**\n1. Webhookは、ターゲットURL、サイトキー、およびオプションパラメーターを含むPOSTを受け取ります。\n2. CapSolverノードはGeeTest V4チャレンジを解決します。\n3. IFノードはエラーをチェックし、成功トークンまたはエラーJSONを返します。\n\n**セットアップ:**\n1. **Settings → Credentials → CapSolver API**にCapSolver APIキーを追加します。\n2. ワークフローをアクティブ化します。\n3. captchaパラメーターを使用してwebhook URLにPOSTします。",
        "height": 494,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -712,
        -400
      ],
      "id": "sticky-blog-main-1773678228112-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solver-geetest-v4",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -192,
        0
      ],
      "id": "a1b2c3d4-0001-0001-0001-a1b2c3d40001",
      "name": "Webhook Trigger",
      "webhookId": "a1b2c3d4-aaaa-bbbb-cccc-a1b2c3d40001",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "GeeTest V4",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "captchaId": "={{ $json.body.captchaId }}",
        "geetestApiServerSubdomain": "={{ $json.body.geetestApiServerSubdomain }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        104,
        0
      ],
      "id": "a1b2c3d4-0001-0001-0001-a1b2c3d40002",
      "name": "Solve GeeTest V4",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "geetest-if-001",
              "leftValue": "={{ $json.error }}",
              "operator": {
                "type": "string",
                "operation": "isEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        408,
        0
      ],
      "id": "a1b2c3d4-0001-0001-0001-a1b2c3d40003",
      "name": "CapSolver Error?"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        712,
        -80
      ],
      "id": "a1b2c3d4-0001-0001-0001-a1b2c3d40004",
      "name": "Respond to Webhook (Success)"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        712,
        128
      ],
      "id": "a1b2c3d4-0001-0001-0001-a1b2c3d40005",
      "name": "Respond to Webhook (Error)"
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve GeeTest V4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V4": {
      "main": [
        [
          {
            "node": "CapSolver Error?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver Error?": {
      "main": [
        [
          {
            "node": "Respond to Webhook (Success)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Webhook (Error)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

ワークフロー:GeeTest V4スクレイピング — 価格と製品の詳細 — CapSolver + スケジュール + Webhook

このワークフローは、6時間ごと(スケジュール)またはオンデマンド(webhook)で製品ページをスクレイピングし、HTMLノードを使用して価格を抽出し、以前に保存された値と比較します。

スケジュールパス:

Copy
6時間ごと -> GeeTest V4を解決 -> 製品ページを取得 -> データを抽出
  -> データを比較 -> データが変更されたか? -> アラートを構築 / 変更なし

主な動作:

  • captchaソリューションフィールドはフォームフィールドとして送信されます(これはGeeTest V4トークンを送信する正しい方法です)
  • HTMLノードは、CSSセレクター(.product-price、h1)を介して価格と製品名を抽出します
  • $workflow.staticData.lastPriceは、実行間で以前の価格を保持します
  • 価格比較は、下落(重大度:deal)と上昇(重大度:info)の両方を検出します
クリックして完全なワークフローJSON(17ノード)を展開
json Copy
{
  "name": "GeeTest V4 Scraping — Price & Product Details — CapSolver + Schedule + Webhook",
  "nodes": [
    {
      "parameters": {
        "content": "## GeeTest V4スクレイピング — 価格と製品モニター\n\n**対象者:** GeeTest V4で保護されたサイトの価格や製品データを監視する必要があるチーム。\n\n**機能:** GeeTest V4を解決し、製品ページを取得し、CSSセレクターを介して価格と名前を抽出し、保存された値と比較し、変更があればアラートを発します。\n\n**仕組み:**\n1. スケジュール(6時間ごと)またはWebhookがフローをトリガーします。\n2. CapSolverがGeeTest V4チャレンジを解決します。\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": [
        -920,
        -380
      ],
      "id": "sticky-blog-main-1773678228112-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "### スケジュールパス\n6時間ごとに自動的に実行されます。\n結果は、実行間の比較のためにワークフローの静的データに保存されます。",
        "height": 480,
        "width": 1900,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -440,
        -280
      ],
      "id": "sticky-blog-section-1773678228112-2",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "### Webhookパス\nオンデマンドトリガー — 同じロジックで、結果をJSON応答として返します。",
        "height": 480,
        "width": 1900,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -440,
        140
      ],
      "id": "sticky-blog-section-1773678228112-3",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -400,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999901",
      "name": "Every 6 Hours"
    },
    {
      "parameters": {
        "operation": "GeeTest V4",
        "websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
        "captchaId": "YOUR_CAPTCHA_ID_HERE",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999902",
      "name": "Solve GeeTest V4",
      "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"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "captcha_id",
              "value": "={{ $json.data.solution.captcha_id }}"
            },
            {
              "name": "lot_number",
              "value": "={{ $json.data.solution.lot_number }}"
            },
            {
              "name": "pass_token",
              "value": "={{ $json.data.solution.pass_token }}"
            },
            {
              "name": "gen_time",
              "value": "={{ $json.data.solution.gen_time }}"
            },
            {
              "name": "captcha_output",
              "value": "={{ $json.data.solution.captcha_output }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999903",
      "name": "Fetch Product Page"
    },
    {
      "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,
        0
      ],
      "id": "99999999-9999-9999-9999-999999999904",
      "name": "Extract Data"
    },
    {
      "parameters": {
        "jsCode": "// ワークフローの静的データから現在および以前の価格を取得\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// 比較のために数値に解析\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// 保存された価格を更新\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": "99999999-9999-9999-9999-999999999905",
      "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": "99999999-9999-9999-9999-999999999906",
      "name": "Data Changed?"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "alert-001",
              "name": "alert",
              "value": "={{ $json.productName }}の価格が{{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === 'dropped' ? '-' : '+' }}{{ $json.diff }})に{{ $json.direction === 'dropped' ? '下落' : '上昇' }}しました",
              "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": "99999999-9999-9999-9999-999999999907",
      "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": "99999999-9999-9999-9999-999999999908",
      "name": "No Change"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "price-monitor-geetest-v4",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -400,
        420
      ],
      "id": "99999999-9999-9999-9999-999999999909",
      "name": "Webhook Trigger",
      "webhookId": "99999999-aaaa-bbbb-cccc-999999999909",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "GeeTest V4",
        "websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
        "captchaId": "YOUR_CAPTCHA_ID_HERE",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        420
      ],
      "id": "99999999-9999-9999-9999-999999999910",
      "name": "Solve GeeTest V4 [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"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "captcha_id",
              "value": "={{ $json.data.solution.captcha_id }}"
            },
            {
              "name": "lot_number",
              "value": "={{ $json.data.solution.lot_number }}"
            },
            {
              "name": "pass_token",
              "value": "={{ $json.data.solution.pass_token }}"
            },
            {
              "name": "gen_time",
              "value": "={{ $json.data.solution.gen_time }}"
            },
            {
              "name": "captcha_output",
              "value": "={{ $json.data.solution.captcha_output }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        420
      ],
      "id": "99999999-9999-9999-9999-999999999911",
      "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": "99999999-9999-9999-9999-999999999912",
      "name": "Extract Data [Webhook]"
    },
    {
      "parameters": {
        "jsCode": "// ワークフローの静的データから現在および以前の価格を取得\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// 比較のために数値に解析\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// 保存された価格を更新\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": "99999999-9999-9999-9999-999999999913",
      "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": "99999999-9999-9999-9999-999999999914",
      "name": "Data Changed? [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "alert-004",
              "name": "alert",
              "value": "={{ $json.productName }}の価格が{{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === 'dropped' ? '-' : '+' }}{{ $json.diff }})に{{ $json.direction === 'dropped' ? '下落' : '上昇' }}しました",
              "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": "99999999-9999-9999-9999-999999999915",
      "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": "99999999-9999-9999-9999-999999999916",
      "name": "No Change [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1712,
        420
      ],
      "id": "99999999-9999-9999-9999-999999999917",
      "name": "Respond to Webhook [Webhook]"
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Solve GeeTest V4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V4": {
      "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": "Solve GeeTest V4 [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V4 [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
          }
        ]
      ]
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Solve GeeTest V4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V4": {
      "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": "Solve GeeTest V4 [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V4 [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 V4アカウントログイン自動化 — CapSolver + スケジュール + Webhook

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

仕組み

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

  1. Webhook — ログイン自動化をトリガーする受信POSTリクエストを受け取ります
  2. GeeTest V4を解決 — チャレンジをCapSolverに送信し、ソリューションを待ちます
  3. ログインフォームを送信 — 解決されたGeeTest V4トークンと資格情報を使用して、ターゲットウェブサイトにHTTP POSTリクエストを発行します
  4. Webhookに応答 — ログイン結果を返します

ノード設定

1. Webhookノード

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

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

2. GeeTest V4を解決(CapSolver)

パラメーター 値
操作 GeeTest V4
ウェブサイトURL https://YOUR-TARGET-SITE.com/login
Captcha ID YOUR_CAPTCHA_ID_HERE

CapSolver資格情報も選択してください。

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

設定 値
メソッド POST
URL https://YOUR-TARGET-SITE.com/login
コンテンツタイプ form-urlencoded
本文パラメーター username=YOUR_USERNAME、password=YOUR_PASSWORD、captcha_id={{ $('Solve GeeTest V4').item.json.data.solution.captcha_id }}、lot_number={{ $('Solve GeeTest V4').item.json.data.solution.lot_number }}、pass_token={{ $('Solve GeeTest V4').item.json.data.solution.pass_token }}、gen_time={{ $('Solve GeeTest V4').item.json.data.solution.gen_time }}、captcha_output={{ $('Solve GeeTest V4').item.json.data.solution.captcha_output }}

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

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

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

試してみる

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

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/login-geetest-v4 \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "captchaId": "e392e1d7fd421dc63325744d5a2b9c73",
    "username": "testuser",
    "password": "testpass"
  }'

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

json Copy
{
  "status": "success",
  "message": "Login successful",
  "solution": {
    "captcha_id": "e392e1d7fd421dc63325744d5a2b9c73",
    "lot_number": "7c18c041a6ed4e...",
    "pass_token": "d88ce40c0a5c5a18...",
    "gen_time": "1709123456",
    "captcha_output": "dGVzdF9jYXB0Y2hh..."
  }
}

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

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

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

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

クリックして完全なワークフローJSONを展開
json Copy
{
  "name": "GeeTest V4 Account Login — CapSolver + Schedule + Webhook",
  "nodes": [
    {
      "parameters": {
        "content": "## GeeTest V4アカウントログイン自動化 — CapSolver + スケジュール + Webhook\n\n**対象者:** GeeTest V4で保護されたアカウントへのログインを自動化する必要があるチーム。\n\n**機能:** GeeTest V4チャレンジを解決し、解決されたトークンとユーザー資格情報を使用してログインフォームを送信します。\n\n**仕組み:**\n1. Webhookがフローをトリガーします。\n2. CapSolverがGeeTest V4チャレンジを解決します。\n3. HTTPリクエストが解決されたトークンとユーザー資格情報を使用してログインフォームを送信します。\n4. 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": [
        -728,
        -400
      ],
      "id": "sticky-blog-main-1773678228112-1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "login-geetest-v4",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -400,
        0
      ],
      "id": "a2b3c4d5-0001-0001-0001-a2b3c4d50001",
      "name": "Webhook Trigger",
      "webhookId": "a2b3c4d5-aaaa-bbbb-cccc-a2b3c4d50001",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "GeeTest V4",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "captchaId": "={{ $json.body.captchaId }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "a2b3c4d5-0001-0001-0001-a2b3c4d50002",
      "name": "Solve GeeTest V4",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $json.body.websiteURL }}",
        "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": "={{ $json.body.username }}"
            },
            {
              "name": "password",
              "value": "={{ $json.body.password }}"
            },
            {
              "name": "captcha_id",
              "value": "={{ $('Solve GeeTest V4').item.json.data.solution.captcha_id }}"
            },
            {
              "name": "lot_number",
              "value": "={{ $('Solve GeeTest V4').item.json.data.solution.lot_number }}"
            },
            {
              "name": "pass_token",
              "value": "={{ $('Solve GeeTest V4').item.json.data.solution.pass_token }}"
            },
            {
              "name": "gen_time",
              "value": "={{ $('Solve GeeTest V4').item.json.data.solution.gen_time }}"
            },
            {
              "name": "captcha_output",
              "value": "={{ $('Solve GeeTest V4').item.json.data.solution.captcha_output }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": false
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "a2b3c4d5-0001-0001-0001-a2b3c4d50003",
      "name": "Submit Login Form"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        512,
        0
      ],
      "id": "a2b3c4d5-0001-0001-0001-a2b3c4d50004",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve GeeTest V4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve GeeTest V4": {
      "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 V4アクセスが見つかりません」

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

「無効なウェブサイトURL」

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

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

GeeTest V4が正常に解決されてもログインに失敗する場合、問題は次の点にある可能性があります。

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

「無効なCapSolver資格情報」

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


ベストプラクティス

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

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

CapSolverボーナスコードバナー

よくある質問

GeeTest V4とは何ですか?

GeeTest V4は、GeeTestの行動CAPTCHAシステムの最新世代であり、適応型チャレンジと行動分析を使用してウェブサイトを保護します。

GeeTest V4はGeeTest V3とどう違いますか?

GeeTest V4はV3よりも構造的にシンプルで、V3が必要とする動的なチャレンジフローではなく、静的なcaptchaIdパラメーターのみを必要とします。また、gcaptcha4.jsスクリプトを使用し、5つのソリューションフィールドを返します。

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

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

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

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

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

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

GeeTest V4トークンが受け入れられないのはなぜですか?

GeeTest V4トークンが受け入れられない場合は、次の点を確認してください。

  • セッションの不一致:GeeTest V4チャレンジの取得とフォームの送信の間で同じセッションとCookieを維持していることを確認してください。
  • その他のフォームフィールド:フォームのHTMLを検査して、送信する必要がある追加の非表示フィールドまたはCSRFトークンがあるかどうかを確認してください。
  • User-Agent:HTTPリクエストで一般的なブラウザのUser-Agentを設定してみてください。
  • パラメーター:websiteURLとcaptchaIdパラメーターが正しいことを確認してください。

GeeTest V4が解決されてもログインに失敗するのはなぜですか?

GeeTest V4が正常に解決されてもログインに失敗する場合、次の点を確認してください。

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

このワークフローは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 12, 2026

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

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

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 17, 2026

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

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

Sora Fujimoto
Sora Fujimoto