Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
Blog/n8n/Cách giải quyết GeeTest V3 trong n8n với CapSolver: Hướng dẫn tích hợp đầy đủ
Mar12, 2026

Cách giải quyết GeeTest V3 trong n8n với CapSolver: Hướng dẫn tích hợp đầy đủ

Emma Foster

Emma Foster

Machine Learning Engineer

GeeTest V3 là một trong những CAPTCHA hành vi được triển khai rộng rãi nhất trên web. Không giống như các thử thách hộp kiểm đơn giản, GeeTest V3 sử dụng các câu đố tương tác — trượt để xác minh, chọn biểu tượng và khớp từ — để phân biệt con người với bot. Nó thường được tìm thấy trên các trang đăng nhập, biểu mẫu đăng ký và các trang web có nhiều dữ liệu ở Châu Á và ngày càng phổ biến trên toàn thế giới.

Điều gì sẽ xảy ra nếu bạn có thể tự động giải GeeTest V3 trong các quy trình làm việc n8n của mình — cho dù bạn đang xây dựng một API giải quyết có thể tái sử dụng, cạo một trang web được bảo vệ bằng captcha hay tự động hóa một biểu mẫu đăng nhập — tất cả mà không cần viết một dòng mã truyền thống nào?

Trong hướng dẫn này, bạn sẽ tìm hiểu cách kết hợp n8n (một công cụ tự động hóa quy trình làm việc trực quan) với CapSolver (một dịch vụ giải captcha được hỗ trợ bởi AI) để giải các thử thách GeeTest V3 theo yêu cầu — dưới dạng một điểm cuối API độc lập hoặc là một bước trong bất kỳ quy trình làm việc tự động hóa nào lớn hơn.

Những gì bạn sẽ xây dựng:

API giải quyết — một điểm cuối có thể tái sử dụng mà các công cụ khác của bạn có thể gọi:

  • Một API giải GeeTest V3

Quy trình làm việc sử dụng trực tiếp — CapSolver được nhúng như một bước trong các tự động hóa lớn hơn:

  • Một công cụ cạo giá và sản phẩm giải GeeTest V3, tìm nạp các trang được bảo vệ và cảnh báo về thay đổi giá
  • Một tự động hóa đăng nhập tài khoản giải GeeTest V3 trước khi gửi thông tin đăng nhập

GeeTest V3 là gì?

GeeTest V3 là một hệ thống CAPTCHA thử thách-phản hồi xác minh người dùng thông qua các tác vụ tương tác. Không giống như reCAPTCHA (sử dụng một mã thông báo duy nhất) hoặc Cloudflare Turnstile (chạy ẩn), GeeTest V3 trình bày các câu đố hiển thị yêu cầu người dùng tương tác:

  • Câu đố trượt — Kéo thanh trượt để hoàn thành một mảnh ghép
  • Nhấp vào biểu tượng — Nhấp vào các biểu tượng cụ thể theo đúng thứ tự
  • Khớp từ — Chọn các ký tự khớp với lời nhắc

Từ góc độ giải quyết, GeeTest V3 có hai tham số quan trọng:

  • gt — Một định danh cho mỗi trang web (giống như khóa trang web). Cái này là tĩnh — nó không thay đổi giữa các phiên.
  • challenge — Một mã thông báo cho mỗi phiên. Cái này là động — nó thay đổi mỗi lần và hết hạn trong khoảng 60-120 giây.

Tham số challenge động này là sự khác biệt chính so với các loại CAPTCHA khác. Mỗi quy trình làm việc giải GeeTest V3 cần một bước bổ sung để tìm nạp một thử thách mới trước khi gửi nó đến CapSolver.

Định dạng giải pháp: Không giống như reCAPTCHA hoặc Turnstile trả về một mã thông báo duy nhất, GeeTest V3 trả về ba giá trị riêng biệt:

  • challenge — Chuỗi thử thách đã giải
  • validate — Mã băm xác thực
  • seccode — Mã bảo mật

Chúng được gửi dưới dạng ba trường biểu mẫu: geetest_challenge, geetest_validate và geetest_seccode.

GeeTest V3 so với V4: GeeTest V4 sử dụng cấu trúc API khác (captcha_id thay vì gt, không có tìm nạp challenge riêng biệt). Hướng dẫn này bao gồm GeeTest V3 cụ thể. Nếu bạn thấy captcha_id trong mã nguồn trang, bạn đang xử lý V4.


Điều kiện tiên quyết

Trước khi bắt đầu, hãy đảm bảo bạn có những điều sau:

  1. Một phiên bản n8n — Tự lưu trữ hoặc n8n Cloud
  2. Một tài khoản CapSolver — Đăng ký tại đây và lấy khóa API của bạn
  3. Nút CapSolver n8n — Đã có sẵn dưới dạng nút chính thức trong n8n (không cần cài đặt)

Quan trọng: Đảm bảo bạn có đủ số dư trong tài khoản CapSolver của mình. Các tác vụ giải GeeTest V3 tiêu thụ tín dụng dựa trên việc sử dụng.


Thiết lập CapSolver trong n8n

CapSolver có sẵn dưới dạng tích hợp chính thức trong n8n — không cần cài đặt nút cộng đồng. Bạn có thể tìm thấy nó trực tiếp trong bảng nút khi xây dựng quy trình làm việc của mình.

Vì đây là một tích hợp chính thức, bạn cần tạo một thông tin xác thực trong n8n để nút CapSolver có thể xác thực với tài khoản của bạn.

Bước 1: Mở trang thông tin xác thực

Đi tới phiên bản n8n của bạn và điều hướng đến Settings -> Credentials. Bạn sẽ thấy tất cả các thông tin xác thực đã cấu hình của mình ở đây.

Trang thông tin xác thực n8n hiển thị tài khoản CapSolver

Bước 2: Tạo thông tin xác thực CapSolver

  1. Nhấp vào Create credential (góc trên bên phải)
  2. Tìm kiếm "CapSolver" và chọn CapSolver API
  3. Nhập Khóa API của bạn — sao chép trực tiếp từ Bảng điều khiển CapSolver
  4. Để Allowed HTTP Request Domains được đặt thành All (mặc định)
  5. Nhấp vào Save

n8n sẽ tự động kiểm tra kết nối. Bạn sẽ thấy một biểu ngữ màu xanh lá cây "Connection tested successfully" xác nhận rằng khóa API của bạn hợp lệ.

Cấu hình thông tin xác thực CapSolver với kiểm tra kết nối thành công

Quan trọng: Mọi nút CapSolver trong quy trình làm việc của bạn sẽ tham chiếu thông tin xác thực này. Bạn chỉ cần tạo nó một lần — tất cả các quy trình làm việc giải quyết của bạn sẽ chia sẻ cùng một thông tin xác thực.

Bây giờ bạn đã sẵn sàng xây dựng quy trình làm việc giải GeeTest V3 của mình!


Cách xác định các tham số GeeTest V3

Trước khi bạn có thể giải một thử thách GeeTest V3, bạn cần tìm ba thứ: tham số gt, điểm cuối API thử thách, và hiểu cách giá trị challenge được tìm nạp động.

Phương pháp 1: Tab Mạng của Công cụ dành cho nhà phát triển

  1. Mở Công cụ dành cho nhà phát triển (F12) -> tab Mạng
  2. Kích hoạt thử thách GeeTest trên trang
  3. Tìm kiếm các yêu cầu chứa gt= trong URL hoặc các phản hồi chứa các trường "gt" và "challenge"
  4. Các mẫu điểm cuối phổ biến:
    • /api/geetest/register
    • /gt/register-slide
    • /captcha?gt=...
  5. Phản hồi thường trông như sau:
json Copy
{
  "gt": "81dc9bdb52d04dc20036dbd8313ed055",
  "challenge": "4a8a08f09d37b73795649038408b5f33ab",
  "success": 1,
  "new_captcha": true
}

Hiểu về thử thách động

Đây là khái niệm quan trọng nhất để tự động hóa GeeTest V3:

  • Giá trị gt là tĩnh cho mỗi trang web — nó không thay đổi giữa các phiên
  • Giá trị challenge là động — nó thay đổi mỗi lần và hết hạn trong ~60-120 giây
  • Bạn phải tìm nạp một challenge mới ngay lập tức trước khi gửi yêu cầu giải đến CapSolver
  • Điểm cuối API thử thách là dành riêng cho trang web (ví dụ: https://example.com/api/geetest/register)

Điều này có nghĩa là mỗi quy trình làm việc GeeTest V3 cần một nút Yêu cầu HTTP bổ sung trước nút CapSolver để tìm nạp thử thách mới. Đây là sự khác biệt cấu trúc chính so với các quy trình làm việc reCAPTCHA hoặc Turnstile.

Mẹo: Thêm ?t={{ Date.now() }} vào URL API thử thách làm tham số chống bộ nhớ đệm để đảm bảo bạn luôn nhận được một thử thách mới.

Để biết hướng dẫn chi tiết về cách xác định các tham số captcha, hãy xem tài liệu chính thức của CapSolver.


Quy trình làm việc: API giải GeeTest V3

Quy trình làm việc này tạo một điểm cuối POST chấp nhận các tham số GeeTest V3 và trả về một thử thách đã giải. Không giống như các bộ giải reCAPTCHA hoặc Turnstile, người gọi phải cung cấp giá trị challenge (mới được tìm nạp) cùng với gt và websiteURL.

Quy trình làm việc giải GeeTest V3 trong n8n

Cách hoạt động

Quy trình làm việc bao gồm bốn nút:

  1. Webhook — Nhận các yêu cầu POST đến với các tham số GeeTest V3
  2. GeeTest V3 — Gửi thử thách đến CapSolver và chờ giải pháp
  3. Lỗi CapSolver? — Nút IF phân nhánh dựa trên việc giải quyết có thất bại hay không ($json.error không trống)
  4. Phản hồi Webhook — Trả về giải pháp khi thành công, hoặc {"error": "..."} khi thất bại

Cấu hình nút

1. Nút Webhook

Cài đặt Giá trị
Phương thức HTTP POST
Đường dẫn solver-geetest-v3
Phản hồi Response Node

Điều này tạo một điểm cuối tại: https://your-n8n-instance.com/webhook/solver-geetest-v3

2. Nút CapSolver GeeTest V3

Tham số Giá trị Mô tả
Thao tác GeeTest V3 Phải được đặt thành GeeTest V3
Loại GeeTestTaskProxyLess Tùy chọn duy nhất có sẵn — biến thể không proxy
URL trang web ={{ $json.body.websiteURL }} URL của trang có thử thách GeeTest
GT ={{ $json.body.gt }} Định danh GeeTest cho mỗi trang web
Thử thách ={{ $json.body.challenge }} Thử thách động cho mỗi phiên (phải mới)
Tên miền phụ máy chủ API GeeTest (Tùy chọn) Máy chủ API GeeTest tùy chỉnh nếu trang web sử dụng một cái

Cũng chọn thông tin xác thực CapSolver của bạn trong nút.

3. Nút Lỗi CapSolver? (IF)

Cài đặt Giá trị
Điều kiện ={{ $json.error }} không trống
Nhánh đúng Chuyển đến nút Lỗi Phản hồi Webhook
Nhánh sai Chuyển đến nút Thành công Phản hồi Webhook

Điều này làm cho đường dẫn lỗi rõ ràng trên canvas. Nút CapSolver tiếp tục khi có lỗi (onError: continueRegularOutput), vì vậy các lỗi sẽ đến đây dưới dạng { "error": "..." } thay vì làm sập quy trình làm việc.

4. Nút Phản hồi Webhook

Nhánh thành công (đầu ra sai của Lỗi CapSolver?):

Cài đặt Giá trị
Phản hồi bằng JSON
Nội dung phản hồi ={{ JSON.stringify($json.data) }}

Kiểm tra

Gửi yêu cầu POST đến điểm cuối webhook của bạn:

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"
  }'

Phản hồi dự kiến:

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

Quan trọng: challenge trong nội dung yêu cầu phải được tìm nạp mới. Nếu bạn gửi một thử thách đã hết hạn, CapSolver sẽ không giải quyết được nó. Các thử thách thường hết hạn trong 60-120 giây.

Nhập quy trình làm việc này

Sao chép JSON bên dưới và nhập nó vào n8n thông qua Menu -> Import from JSON:

Nhấp để mở rộng JSON quy trình làm việc
json Copy
{
  "name": "GeeTest V3 Scraping — Price & Product Details — CapSolver + Schedule + Webhook",
  "nodes": [
    {
      "parameters": {
        "content": "## Cạo GeeTest V3 — Theo dõi giá & sản phẩm\n\n**Dành cho ai:** Các nhóm theo dõi giá hoặc dữ liệu sản phẩm trên các trang web được bảo vệ bằng GeeTest V3.\n\n**Nó làm gì:** Giải GeeTest V3, tìm nạp trang sản phẩm, trích xuất giá & tên qua bộ chọn CSS, so sánh với các giá trị đã lưu trữ và cảnh báo về các thay đổi.\n\n**Cách hoạt động:**\n1. Lịch trình (mỗi 6h) hoặc Webhook kích hoạt luồng\n2. CapSolver giải thử thách GeeTest V3\n3. Yêu cầu HTTP tìm nạp trang sản phẩm bằng mã thông báo đã giải\n4. Nút HTML trích xuất giá và tên sản phẩm\n5. Nút mã so sánh giá hiện tại với giá đã lưu trữ → cảnh báo về thay đổi\n\n**Thiết lập:**\n1. Thêm khóa API CapSolver của bạn trong **Settings → Credentials**\n2. Thay thế các URL giữ chỗ và khóa trang web\n3. Cập nhật bộ chọn CSS trong Trích xuất dữ liệu để khớp với trang đích của bạn\n4. Kết nối đầu ra Xây dựng cảnh báo với kênh thông báo của bạn",
        "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": "### Đường dẫn lịch trình\nChạy tự động mỗi 6 giờ.\nKết quả được lưu trữ trong dữ liệu tĩnh của quy trình làm việc để so sánh giữa các lần thực thi.",
        "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": "### Đường dẫn Webhook\nKích hoạt theo yêu cầu — logic tương tự, trả về kết quả dưới dạng phản hồi 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"
  }
}

Quy trình làm việc: Tự động hóa đăng nhập tài khoản — Giải GeeTest V3 và gửi thông tin đăng nhập

Quy trình làm việc này tự động hóa việc gửi biểu mẫu đăng nhập được bảo vệ bằng GeeTest V3 từ đầu đến cuối. Nó giải thử thách GeeTest V3 trước khi gửi thông tin đăng nhập.

Cách hoạt động

Quy trình làm việc này bao gồm năm nút:

  1. Webhook — Nhận các yêu cầu POST đến kích hoạt tự động hóa đăng nhập
  2. Tìm nạp thử thách GeeTest — Thực hiện yêu cầu HTTP đến trang web đích để lấy giá trị challenge mới
  3. Giải GeeTest V3 — Gửi gt, challenge và websiteURL đến CapSolver
  4. Gửi biểu mẫu đăng nhập — Thực hiện yêu cầu HTTP POST đến trang web đích, chứa thông tin đăng nhập và mã thông báo GeeTest V3 đã giải
  5. Phản hồi Webhook — Trả về kết quả đăng nhập

Cấu hình nút

1. Nút Webhook

Cài đặt Giá trị
Phương thức HTTP POST
Đường dẫn login-geetest-v3
Phản hồi Response Node

Điều này tạo một điểm cuối tại: https://your-n8n-instance.com/webhook/login-geetest-v3

2. Tìm nạp thử thách GeeTest (Yêu cầu HTTP)

Cài đặt Giá trị
URL https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}
Tùy chọn Full Response = false

Điều này sẽ trả về một phản hồi JSON chứa các giá trị gt và challenge.

3. Giải GeeTest V3 (CapSolver)

Tham số Giá trị
Thao tác GeeTest V3
URL trang web https://YOUR-TARGET-SITE.com/login
GT ={{ $json.gt }}
Thử thách ={{ $json.challenge }}

Cũng chọn thông tin xác thực CapSolver của bạn.

4. Gửi biểu mẫu đăng nhập (Yêu cầu HTTP)

Cài đặt Giá trị
Phương thức POST
URL https://YOUR-TARGET-SITE.com/login
Loại nội dung form-urlencoded
Tham số nội dung 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 }}

Quan trọng: Đảm bảo thay thế YOUR_USERNAME và YOUR_PASSWORD bằng thông tin đăng nhập thực tế. Ngoài ra, bạn có thể cần điều chỉnh tên trường biểu mẫu để khớp với HTML của trang web đích.

5. Phản hồi Webhook (Thành công/Thất bại)

Cài đặt Giá trị
Phản hồi bằng JSON
Nội dung phản hồi ={{ JSON.stringify($json) }}

Kiểm tra

Gửi yêu cầu POST đến điểm cuối webhook của bạn:

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

Phản hồi dự kiến (thành công):

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

Phản hồi dự kiến (thất bại):

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

Nhập quy trình làm việc này

Sao chép JSON bên dưới và nhập nó vào n8n thông qua Menu -> Import from JSON:

Nhấp để mở rộng JSON quy trình làm việc
json Copy
{
  "name": "Account Login Automation — Solve GeeTest V3 & Submit Credentials",
  "nodes": [
    {
      "parameters": {
        "content": "## Tự động hóa đăng nhập tài khoản — Giải GeeTest V3 và gửi thông tin đăng nhập\n\n**Dành cho ai:** Các nhóm cần tự động hóa việc đăng nhập vào các tài khoản được bảo vệ bằng GeeTest V3.\n\n**Nó làm gì:** Tìm nạp thử thách GeeTest V3, giải nó bằng CapSolver, sau đó gửi biểu mẫu đăng nhập bằng mã thông báo đã giải và thông tin đăng nhập của người dùng.\n\n**Cách hoạt động:**\n1. Webhook kích hoạt luồng\n2. Yêu cầu HTTP tìm nạp thử thách GeeTest V3 mới\n3. CapSolver giải thử thách\n4. Yêu cầu HTTP gửi biểu mẫu đăng nhập, chứa mã thông báo GeeTest V3 đã giải và thông tin đăng nhập của người dùng\n5. Webhook phản hồi kết quả đăng nhập\n\n**Thiết lập:**\n1. Thêm khóa API CapSolver của bạn trong **Settings → Credentials**\n2. Thay thế các URL giữ chỗ và thông tin đăng nhập\n3. Điều chỉnh tên trường biểu mẫu để khớp với trang web đích của bạn\n4. Kích hoạt quy trình làm việc",
        "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"
  }
}

Khắc phục sự cố

"Không tìm thấy quyền truy cập GeeTest V3"

Lỗi này có nghĩa là tài khoản hoặc gói CapSolver của bạn không bao gồm quyền truy cập GeeTest V3. Vui lòng kiểm tra bảng điều khiển CapSolver của bạn để xác minh xem gói của bạn có bao gồm dịch vụ này không.

"Thử thách đã hết hạn" hoặc "Thử thách không hợp lệ"

Giá trị challenge của GeeTest V3 là động và hết hạn nhanh chóng (thường trong vòng 60-120 giây). Bạn phải tìm nạp một challenge mới ngay lập tức trước khi gửi yêu cầu giải đến CapSolver. Đảm bảo quy trình làm việc của bạn tìm nạp challenge mới nhất trước mỗi lần thử giải.

"URL trang web không hợp lệ" hoặc "Tham số GT không hợp lệ"

Những lỗi này cho biết rằng các tham số websiteURL hoặc gt bạn cung cấp trong nút CapSolver không chính xác. Vui lòng kiểm tra kỹ tab mạng của công cụ dành cho nhà phát triển của trang web đích để đảm bảo bạn đang sử dụng các giá trị chính xác.

Đăng nhập không thành công, ngay cả khi GeeTest V3 đã được giải

Nếu GeeTest V3 được giải thành công nhưng đăng nhập vẫn không thành công, có thể có vấn đề với:

  • Thông tin đăng nhập không chính xác: Kiểm tra kỹ tên người dùng và mật khẩu bạn đã gửi trong biểu mẫu đăng nhập.
  • Không khớp phiên: Nếu quá trình đăng nhập liên quan đến phiên hoặc cookie, hãy đảm bảo bạn duy trì cùng một phiên giữa việc tìm nạp thử thách GeeTest và gửi biểu mẫu đăng nhập.
  • Các trường biểu mẫu khác: Trang web đích có thể yêu cầu các trường ẩn bổ sung, mã thông báo CSRF hoặc các tham số khác để đăng nhập thành công. Kiểm tra HTML của biểu mẫu để xác định bất kỳ trường nào khác được yêu cầu.
  • Tác nhân người dùng: Một số trang web có thể từ chối các yêu cầu dựa trên chuỗi tác nhân người dùng. Hãy thử đặt một tác nhân người dùng trình duyệt phổ biến trong các yêu cầu HTTP của bạn.

"Thông tin xác thực CapSolver không hợp lệ"

Lỗi này cho biết rằng khóa API CapSolver của bạn được cấu hình trong n8n không chính xác hoặc đã hết hạn. Vui lòng kiểm tra bảng điều khiển CapSolver của bạn và cập nhật thông tin xác thực trong n8n.


Các phương pháp hay nhất

  1. Luôn tìm nạp thử thách mới: Trước mỗi lần thử giải GeeTest V3, hãy luôn thực hiện yêu cầu HTTP đến trang web đích để lấy giá trị challenge mới nhất. Các thử thách hết hạn nhanh chóng.
  2. Duy trì phiên: Nếu trang web đích sử dụng phiên hoặc cookie, hãy đảm bảo bạn duy trì cùng một phiên giữa việc tìm nạp thử thách và gửi biểu mẫu. Trong n8n, bạn có thể sử dụng các nút yêu cầu HTTP để xử lý cookie.
  3. Xác thực các tham số: Kiểm tra kỹ các tham số gt, websiteURL và challenge có chính xác không. Đây là chìa khóa để giải GeeTest V3 thành công.
  4. Xử lý lỗi: Bao gồm logic xử lý lỗi trong quy trình làm việc của bạn để xử lý các lỗi giải quyết hoặc lỗi đăng nhập một cách khéo léo. Điều này có thể bao gồm các cơ chế thử lại hoặc thông báo.
  5. Sử dụng tác nhân người dùng thích hợp: Đặt một chuỗi tác nhân người dùng trình duyệt phổ biến trong tất cả các yêu cầu HTTP của bạn để tránh bị trang web chặn.
  6. Kiểm tra và lặp lại: Việc triển khai GeeTest V3 có thể khác nhau giữa các trang web. Bắt đầu nhỏ, kiểm tra quy trình làm việc của bạn và lặp lại khi cần thiết để đảm bảo nó hoạt động đáng tin cậy trên mục tiêu cụ thể của bạn.
  7. Không cần proxy: Không giống như một số loại captcha khác, việc giải GeeTest V3 thường không yêu cầu proxy. CapSolver xử lý các yêu cầu proxy nội bộ.

Sẵn sàng bắt đầu? Đăng ký CapSolver và sử dụng mã thưởng n8n để nhận thêm 8% tiền thưởng cho lần nạp đầu tiên của bạn!

Biểu ngữ mã thưởng CapSolver

Kết luận

Bạn đã học cách xây dựng API giải GeeTest V3 và quy trình làm việc tự động hóa đăng nhập tài khoản bằng n8n và CapSolver.

Tóm tắt:

  • Cách GeeTest V3 hoạt động — Nó sử dụng các câu đố tương tác và dựa vào tham số gt tĩnh và tham số challenge động.
  • Cách xác định các tham số GeeTest V3 — Sử dụng tab mạng của công cụ dành cho nhà phát triển để tìm gt và điểm cuối API thử thách.
  • Tầm quan trọng của thử thách động — Phải tìm nạp giá trị challenge mới trước mỗi lần thử giải.
  • Một điểm cuối API giải quyết — Chấp nhận các tham số GeeTest V3 và trả về thử thách đã giải.
  • Một quy trình làm việc tự động hóa đăng nhập tài khoản — Giải GeeTest V3 trước khi gửi thông tin đăng nhập.
  • Mẹo khắc phục sự cố — Xử lý các lỗi phổ biến như thử thách hết hạn, tham số không hợp lệ và đăng nhập không thành công.
  • Các phương pháp hay nhất — Luôn tìm nạp thử thách mới, duy trì phiên, xác thực các tham số và xử lý lỗi.

Sự phức tạp chính của GeeTest V3 nằm ở tham số challenge động và định dạng giải pháp ba phần của nó. Bằng cách thêm một nút yêu cầu HTTP trước nút CapSolver để tìm nạp một thử thách mới, bạn có thể tự động hóa việc giải GeeTest V3 một cách hiệu quả. Sau đó, bạn có thể tích hợp liền mạch các mã thông báo đã giải này vào quy trình làm việc đăng nhập hoặc cạo của mình.

Mẹo: Các quy trình làm việc này sử dụng trình kích hoạt Webhook, nhưng bạn có thể hoán đổi nút trình kích hoạt bằng bất kỳ trình kích hoạt n8n nào khác — thủ công, sự kiện ứng dụng, gửi biểu mẫu, v.v. Sau khi GeeTest V3 được giải, hãy sử dụng các nút tích hợp của n8n để lưu kết quả vào Google Sheets, cơ sở dữ liệu, bộ nhớ đám mây hoặc gửi cảnh báo qua Telegram/Slack/Email.


Câu hỏi thường gặp

GeeTest V3 là gì?

GeeTest V3 là một hệ thống CAPTCHA hành vi xác minh người dùng thông qua các câu đố tương tác (như câu đố trượt, nhấp vào biểu tượng và khớp từ). Nó sử dụng một tham số gt tĩnh và một tham số challenge động hết hạn nhanh chóng.

GeeTest V3 khác với GeeTest V4 như thế nào?

GeeTest V4 sử dụng cấu trúc API khác, chẳng hạn như captcha_id thay vì gt, và không yêu cầu tìm nạp challenge riêng biệt. Hướng dẫn này tập trung cụ thể vào GeeTest V3. Nếu bạn thấy captcha_id trong mã nguồn trang, bạn đang xử lý V4.

Chi phí để giải một thử thách GeeTest V3 là bao nhiêu?

Giá cả khác nhau tùy theo việc sử dụng. Vui lòng kiểm tra trang giá của CapSolver để biết giá GeeTest V3 hiện tại. Các tác vụ giải GeeTest V3 thường đắt hơn nhận dạng hình ảnh thành văn bản đơn giản, nhưng rẻ hơn một số loại captcha phức tạp khác.

Mất bao lâu để giải một thử thách GeeTest V3?

Các tác vụ giải GeeTest V3 thường mất 10-30 giây, tùy thuộc vào độ phức tạp của thử thách và tải của máy chủ CapSolver. Không giống như ImageToTextTask, việc giải GeeTest V3 liên quan đến việc tạo và thăm dò tác vụ, vì vậy nó không trả về ngay lập tức.

Tôi có cần proxy cho GeeTest V3 không?

Dịch vụ giải GeeTest V3 của CapSolver thường không yêu cầu bạn cung cấp proxy. CapSolver xử lý các yêu cầu proxy nội bộ. Bạn chỉ cần cung cấp các tham số websiteURL, gt và challenge.

Tại sao giá trị challenge của tôi luôn hết hạn?

Giá trị challenge của GeeTest V3 là động và hết hạn nhanh chóng (thường trong vòng 60-120 giây). Bạn phải tìm nạp một challenge mới ngay lập tức trước khi gửi yêu cầu giải đến CapSolver. Đảm bảo quy trình làm việc của bạn bao gồm một nút yêu cầu HTTP để tìm nạp challenge mới nhất trước mỗi lần thử giải.

Điều gì sẽ xảy ra nếu GeeTest V3 được giải thành công nhưng đăng nhập vẫn không thành công?

Nếu GeeTest V3 được giải thành công nhưng đăng nhập vẫn không thành công, hãy kiểm tra những điều sau:

  • Thông tin đăng nhập: Đảm bảo bạn đã gửi đúng tên người dùng và mật khẩu.
  • Phiên/Cookie: Đảm bảo bạn duy trì cùng một phiên và cookie giữa việc tìm nạp thử thách và gửi biểu mẫu đăng nhập.
  • Các trường biểu mẫu khác: Kiểm tra biểu mẫu HTML để xem có bất kỳ trường ẩn hoặc mã thông báo CSRF nào khác được yêu cầu không.
  • Tác nhân người dùng: Hãy thử đặt một chuỗi tác nhân người dùng trình duyệt phổ biến trong các yêu cầu HTTP của bạn.

Tôi có thể sử dụng quy trình làm việc này với n8n Cloud không?

Có. Quy trình làm việc này hoạt động với cả n8n tự lưu trữ và n8n Cloud. Nút CapSolver đã có sẵn dưới dạng tích hợp chính thức; bạn chỉ cần thêm thông tin xác thực API của mình.

Xem thêm

n8nMar 09, 2026

Cách Giải reCAPTCHA v2/v3 Sử Dụng CapSolver và n8n

Xây dựng API giải eCAPTCHA v2/v3 bằng CapSolver và n8n. Tìm hiểu cách tự động hóa việc giải token, gửi token đến website và trích xuất dữ liệu được bảo vệ mà không cần lập trình.

Anh Tuan
Anh Tuan
n8nMar 16, 2026

Cách giải bài toán ImageToText bằng CapSolver và n8n

Chuyển đổi ảnh thành văn bản, giải mã captcha, captcha OCR, capsolver, n8n, quy trình làm việc n8n, tự động hóa, API OCR, tự động hóa captcha, ảnh base64, nhận dạng hình ảnh, OCR AI, webhook, quy trình làm việc theo lịch trình, tự động hóa biểu mẫu, bỏ qua captcha, xử lý phiên, captcha không cần proxy, OCR tức thời, nhận dạng văn bản

Nội dung

Sora Fujimoto
Sora Fujimoto
n8nMar 12, 2026

Cách giải GeeTest V4 trong n8n với CapSolver: Hướng dẫn tích hợp hoàn chỉnh

Tìm hiểu cách tích hợp CapSolver với n8n để giải GeeTest V4 và xây dựng quy trình tự động hóa đáng tin cậy.

Sora Fujimoto
Sora Fujimoto
n8nMar 17, 2026

Cách sử dụng CapSolver trong n8n: Hướng dẫn toàn diện để giải CAPTCHA trong các quy trình làm việc của bạn

Học cách tích hợp CapSolver với n8n để giải CAPTCHAs và xây dựng các quy trình tự động đáng tin cậy một cách dễ dàng.

Anh Tuan
Anh Tuan