Khắc Phục Sự Cố

Các lỗi và cách sửa lỗi vô hình reCAPTCHA phổ biến

ReCAPTCHA vô hình sẽ loại bỏ hộp kiểm — nhưng thêm các chế độ lỗi mới để tự động hóa. Vấn đề lớn nhất là không phát hiện được tiện ích ẩn, thiếu chức năng gọi lại, gửi mã thông báo đã hết hạnsử dụng tham số tiêu chuẩn v2 khi yêu cầu tham số ẩn.

Hướng dẫn này bao gồm mọi mẫu lỗi phổ biến với cách khắc phục chính xác. Nếu bạn cần thông tin cơ bản về cách hoạt động của reCAPTCHA vô hình, hãy đọcreCAPTCHA Invisible hoạt động như thế nào và cách giải quyết nóĐầu tiên.


Tham khảo lỗi nhanh

Lỗi nguyên nhân sửa chữa
ERROR_WRONG_GOOGLEKEY Khóa trang web hoặc khóa trang web sai từ một tên miền khác Trích xuất khóa trang web từ div tiện ích vô hình hoặc lệnh gọi grecaptcha.render()
ERROR_PAGEURL URL không khớp - URL trang mẹ đã gửi thay vì URL iframe Sử dụng URL chính xác nơi tải tiện ích vô hình
ERROR_CAPTCHA_UNSOLVABLE Google đã gắn cờ nhiệm vụ này là không thể Thử lại với proxy và cookie mới; kiểm tra xem trang web đã chuyển sang v3 chưa
ERROR_BAD_TOKEN_OR_PAGEURL Mã thông báo bị từ chối bởi trang web mục tiêu Xác minh chính xác pageurl khớp; tiêm qua gọi lại, không phải trường ẩn
CAPCHA_NOT_READY Nhiệm vụ vẫn đang xử lý Tiếp tục bỏ phiếu cứ sau 5 giây; giải quyết vô hình mất 10-30 giây
ERROR_KEY_DOES_NOT_EXIST Khóa API CaptchaAI không hợp lệ Kiểm tra chìa khóa tạicaptchaai.com/account
Mã thông báo được chấp nhận nhưng biểu mẫu không thành công Lệnh gọi lại không được thực hiện sau khi tiêm mã thông báo Tìm và gọi hàm data-callback bằng token

Lỗi 1: Không phát hiện reCAPTCHA ẩn trên trang

ReCAPTCHA vô hình không có hộp kiểm hiển thị. Nếu công cụ quét của bạn không phát hiện ra nó, thì các yêu cầu được bảo vệ bằng hình ảnh xác thực sẽ không thành công trong im lặng kèm theo lỗi gửi biểu mẫu hoặc chuyển hướng.

Cách phát hiện reCAPTCHA vô hình

Hãy tìm những mẫu này trong trang HTML:

<!-- Pattern 1: div with data-size="invisible" -->
<div class="g-recaptcha" data-sitekey="6LdKlZEU..."
     data-size="invisible"
     data-callback="onSubmit"></div>

<!-- Pattern 2: button with data-sitekey and invisible size -->
<button class="g-recaptcha"
        data-sitekey="6LdKlZEU..."
        data-callback="onSubmit"
        data-action="submit">Submit</button>

<!-- Pattern 3: programmatic render with size: invisible -->
<script>
  grecaptcha.render('submit-btn', {
    sitekey: '6LdKlZEU...',
    callback: onSubmit,
    size: 'invisible'
  });
</script>

Kịch bản phát hiện (Python):

import requests
from bs4 import BeautifulSoup
import re

def detect_invisible_recaptcha(url):
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, "html.parser")

    # Check for data-size="invisible"
    widget = soup.find("div", {"data-size": "invisible", "class": "g-recaptcha"})
    if widget:
        return {
            "type": "invisible",
            "sitekey": widget.get("data-sitekey"),
            "callback": widget.get("data-callback")
        }

    # Check for programmatic render with invisible
    scripts = soup.find_all("script")
    for script in scripts:
        if script.string and "size" in str(script.string) and "invisible" in str(script.string):
            key_match = re.search(r"sitekey['\"]?\s*[:=]\s*['\"]([^'\"]+)", script.string)
            if key_match:
                return {
                    "type": "invisible-programmatic",
                    "sitekey": key_match.group(1),
                    "callback": "check grecaptcha.render() call"
                }

    return None

Kịch bản phát hiện (Node.js):

const axios = require("axios");
const cheerio = require("cheerio");

async function detectInvisibleRecaptcha(url) {
  const { data } = await axios.get(url);
  const $ = cheerio.load(data);

  // Check for data-size="invisible"
  const widget = $(".g-recaptcha[data-size='invisible']");
  if (widget.length) {
    return {
      type: "invisible",
      sitekey: widget.attr("data-sitekey"),
      callback: widget.attr("data-callback"),
    };
  }

  // Check script tags for programmatic invisible render
  const scriptContent = $("script")
    .map((_, el) => $(el).html())
    .get()
    .join("\n");
  if (scriptContent.includes("invisible")) {
    const keyMatch = scriptContent.match(/sitekey['"]?\s*[:=]\s*['"]([^'"]+)/);
    if (keyMatch) {
      return {
        type: "invisible-programmatic",
        sitekey: keyMatch[1],
        callback: "check grecaptcha.render() call",
      };
    }
  }

  return null;
}

Lỗi 2: Khóa trang web sai — ERROR_WRONG_GOOGLEKEY

Điều này xảy ra khi bạn gửi khóa trang web không khớp với tiện ích reCAPTCHA vô hình trên trang đích. Nguyên nhân phổ biến:

  • Đã sao chép khóa trang web từ hộp kiểm v2 trên một trang khác
  • Đã sử dụng khóa trang web từ URL neo của phiên bản reCAPTCHA khác
  • Trang có nhiều tiện ích reCAPTCHA và bạn đã lấy nhầm tiện ích

Khắc phục: Trích xuất khóa trang web vô hình chính xác

import requests
from bs4 import BeautifulSoup

def get_invisible_sitekey(url):
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, "html.parser")

    # Priority 1: invisible widget
    widget = soup.find(attrs={"data-size": "invisible", "class": "g-recaptcha"})
    if widget:
        return widget["data-sitekey"]

    # Priority 2: any g-recaptcha div (may be invisible without data-size)
    widget = soup.find(class_="g-recaptcha")
    if widget and widget.get("data-sitekey"):
        return widget["data-sitekey"]

    return None

sitekey = get_invisible_sitekey("https://staging.example.com/qa-login")
print(f"Sitekey: {sitekey}")

Lỗi 3: Lệnh gọi lại không được thực hiện — gửi biểu mẫu nhưng không có gì xảy ra

Đây là lỗi reCAPTCHA vô hình số một mà các nhà phát triển đã bỏ qua. Không giống như hộp kiểm v2 trong đó việc đưa mã thông báo vào g-recaptcha-response là đủ, reCAPTCHA vô hình hầu như luôn sử dụng chức năng gọi lại JavaScript. Nếu bạn chèn mã thông báo nhưng không gọi lại lệnh gọi lại thì biểu mẫu sẽ không bao giờ xử lý.

Cách hoạt động của luồng gọi lại

  1. grecaptcha.execute() khơi dậy thử thách vô hình
  2. Sau khi giải xong, Google gọi hàm được chỉ định trong data-callback
  3. Hàm gọi lại đó gửi biểu mẫu hoặc thực hiện lệnh gọi API

Khắc phục: Tìm và thực hiện cuộc gọi lại

Bước 1 — Xác định tên gọi lại:

# From HTML: data-callback="onSubmit"
# From JS: callback: onSubmit
# From grecaptcha.render: second argument with callback property

Bước 2 — Chèn mã thông báo VÀ gọi lệnh gọi lại (Selenium):

from selenium import webdriver
import requests
import time

driver = webdriver.Chrome()
driver.get("https://example.com/form")

# Get sitekey
sitekey = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-sitekey")
callback_name = driver.find_element("css selector", ".g-recaptcha").get_attribute("data-callback")

# Solve with CaptchaAI
task_id = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": driver.current_url,
    "invisible": 1
}).text.split("|")[1]

# Poll for result
token = None
for _ in range(60):
    time.sleep(5)
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY",
        "action": "get",
        "id": task_id
    }).text
    if resp.startswith("OK|"):
        token = resp.split("|")[1]
        break

# Inject token into the response field
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)

# CRITICAL: Call the callback function
driver.execute_script(f'{callback_name}("{token}");')

Bước 2 — Tiêm mã thông báo VÀ gọi lệnh gọi lại (Puppeteer):

const puppeteer = require("puppeteer");
const axios = require("axios");

(async () => {
  const browser = await puppeteer.launch({ headless: "new" });
  const page = await browser.newPage();
  await page.goto("https://example.com/form");

  // Get sitekey and callback
  const { sitekey, callback } = await page.evaluate(() => {
    const el = document.querySelector(".g-recaptcha[data-size='invisible']");
    return {
      sitekey: el?.getAttribute("data-sitekey"),
      callback: el?.getAttribute("data-callback"),
    };
  });

  // Submit to CaptchaAI
  const submitResp = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: "YOUR_API_KEY",
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: page.url(),
      invisible: 1,
    },
  });
  const taskId = submitResp.data.split("|")[1];

  // Poll for result
  let token;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: "YOUR_API_KEY", action: "get", id: taskId },
    });
    if (result.data.startsWith("OK|")) {
      token = result.data.split("|")[1];
      break;
    }
  }

  // Inject token and fire callback
  await page.evaluate(
    (tok, cb) => {
      document.getElementById("g-recaptcha-response").value = tok;
      if (cb && typeof window[cb] === "function") {
        window[cb](tok);
      }
    },
    token,
    callback,
  );

  await browser.close();
})();

Lỗi 4: Thiếu tham số invisible=1

Khi giải reCAPTCHA vô hình thông qua CaptchaAI, bạn phải đưa invisible=1 vào yêu cầu của mình. Nếu không có nó, người giải sẽ coi nhiệm vụ này như một thử thách hộp kiểm v2 tiêu chuẩn, điều này có thể dẫn đến ERROR_CAPTCHA_UNSOLVABLE hoặc mã thông báo mà trang đích từ chối.

Yêu cầu sai và đúng

# WRONG — missing invisible=1
params = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url
}

# CORRECT — includes invisible=1
params = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url,
    "invisible": 1  # Required for invisible reCAPTCHA
}

response = requests.get("https://ocr.captchaai.com/in.php", params=params)

Lỗi 5: Mã thông báo đã hết hạn trước khi gửi

Mã thông báo reCAPTCHA vô hình sẽ hết hạn sau 120 giây — giống như tiêu chuẩn v2. Tuy nhiên, quy trình công việc vô hình thường có các bước xử lý bổ sung giữa việc giải quyết và gửi, khiến khả năng hết hạn cao hơn.

Triệu chứng

  • Biểu mẫu trả về lỗi chung sau khi chèn mã thông báo
  • siteverify phía máy chủ trả về timeout-or-duplicate
  • Mã thông báo hợp lệ nhưng mất quá nhiều thời gian để đến bước gửi

Cách khắc phục: Giải quyết kịp thời

Chỉ yêu cầu giải quyết khi bạn sẵn sàng gửi ngay:

import requests
import time

def solve_invisible_recaptcha(api_key, sitekey, page_url):
    # Submit task
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "invisible": 1
    })
    if not resp.text.startswith("OK|"):
        raise Exception(f"Submit failed: {resp.text}")
    task_id = resp.text.split("|")[1]

    # Poll for result
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key,
            "action": "get",
            "id": task_id
        })
        if result.text.startswith("OK|"):
            return result.text.split("|")[1]
        if result.text != "CAPCHA_NOT_READY":
            raise Exception(f"Solve failed: {result.text}")

    raise Exception("Solve timed out after 5 minutes")

# Usage: solve JUST before you need to submit
# 1. Navigate to page and prepare form data first
# 2. THEN solve the captcha
# 3. Inject token and submit immediately
token = solve_invisible_recaptcha("YOUR_API_KEY", sitekey, page_url)
# Submit within 120 seconds of receiving the token

Lỗi 6: Mã thông báo bị từ chối - ERROR_BAD_TOKEN_OR_PAGEURL

Trang web mục tiêu đã xác minh mã thông báo với Google và gặp lỗi. Nguyên nhân phổ biến:

nguyên nhân Làm thế nào để xác định sửa chữa
pageurl sai URL không khớp với tên miền trong đăng ký sitekey Sử dụng URL chính xác nơi tiện ích tải
Mã thông báo được sử dụng trên tên miền khác Tái sử dụng mã thông báo tên miền chéo Giải quyết với pageurl của tên miền chính xác
Mã thông báo đã được sử dụng Gửi cùng một mã thông báo hai lần Yêu cầu một giải pháp mới cho mỗi lần gửi
IP không khớp IP của bạn khác với IP của người giải Thêm tham số proxy của bạn để khớp với IP phiên
Cờ vô hình bị thiếu Đã giải quyết theo tiêu chuẩn v2, được sử dụng trên trang vô hình Thêm invisible=1 vào yêu cầu giải quyết

Danh sách kiểm tra gỡ lỗi

def debug_invisible_solve(api_key, sitekey, page_url, proxy=None):
    """Run a diagnostic solve with detailed logging."""
    print(f"Sitekey: {sitekey}")
    print(f"Page URL: {page_url}")
    print(f"Proxy: {proxy or 'none'}")

    params = {
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "invisible": 1
    }
    if proxy:
        params["proxy"] = proxy
        params["proxytype"] = "HTTP"

    # Submit
    resp = requests.get("https://ocr.captchaai.com/in.php", params=params)
    print(f"Submit response: {resp.text}")
    if not resp.text.startswith("OK|"):
        return None

    task_id = resp.text.split("|")[1]
    print(f"Task ID: {task_id}")

    # Poll with timing
    start = time.time()
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id
        })
        elapsed = time.time() - start
        print(f"  [{elapsed:.0f}s] {result.text[:50]}")
        if result.text.startswith("OK|"):
            token = result.text.split("|")[1]
            print(f"Token received after {elapsed:.0f}s")
            print(f"Token length: {len(token)} characters")
            print(f"Token starts with: {token[:30]}...")
            return token
        if result.text != "CAPCHA_NOT_READY":
            print(f"FAILED: {result.text}")
            return None

    print("TIMEOUT after 5 minutes")
    return None

Lỗi 7: Nhiều tiện ích reCAPTCHA trên một trang

Một số trang có cả hộp kiểm v2 hiển thị VÀ reCAPTCHA ẩn. Nếu bạn giải sai, mã thông báo hợp lệ nhưng không khớp với tiện ích bảo vệ hành động bạn cần.

Khắc phục: Nhắm mục tiêu đúng tiện ích

from bs4 import BeautifulSoup

def find_all_recaptcha_widgets(html):
    soup = BeautifulSoup(html, "html.parser")
    widgets = []

    for el in soup.find_all(class_="g-recaptcha"):
        widgets.append({
            "sitekey": el.get("data-sitekey"),
            "size": el.get("data-size", "normal"),
            "callback": el.get("data-callback"),
            "tag": el.name,
            "id": el.get("id")
        })

    return widgets

# Example output:
# [
#   {"sitekey": "6LdA...", "size": "normal", "callback": None, "tag": "div", "id": "recaptcha-login"},
#   {"sitekey": "6LdB...", "size": "invisible", "callback": "onRegister", "tag": "div", "id": "recaptcha-register"}
# ]
# Use the widget with size="invisible" for the invisible solve

Hoàn thành bộ giải reCAPTCHA vô hình với khả năng xử lý lỗi

Trình bao bọc sẵn sàng sản xuất này xử lý tất cả các lỗi trên:

import requests
import time
import logging

logger = logging.getLogger(__name__)

class InvisibleRecaptchaSolver:
    def __init__(self, api_key, max_retries=3):
        self.api_key = api_key
        self.max_retries = max_retries
        self.base_url = "https://ocr.captchaai.com"

    def solve(self, sitekey, page_url, proxy=None):
        """Solve invisible reCAPTCHA with automatic retry on transient errors."""
        for attempt in range(1, self.max_retries + 1):
            try:
                token = self._attempt_solve(sitekey, page_url, proxy)
                if token:
                    return token
            except Exception as e:
                logger.warning(f"Attempt {attempt} failed: {e}")
                if attempt < self.max_retries:
                    time.sleep(2 ** attempt)
        raise Exception(f"Failed to solve after {self.max_retries} attempts")

    def _attempt_solve(self, sitekey, page_url, proxy):
        params = {
            "key": self.api_key,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": page_url,
            "invisible": 1
        }
        if proxy:
            params["proxy"] = proxy
            params["proxytype"] = "HTTP"

        # Submit task
        resp = requests.get(f"{self.base_url}/in.php", params=params)

        if "ERROR" in resp.text:
            error = resp.text.strip()
            if error in ("ERROR_WRONG_GOOGLEKEY", "ERROR_KEY_DOES_NOT_EXIST"):
                raise Exception(f"Configuration error (do not retry): {error}")
            if error == "ERROR_ZERO_BALANCE":
                raise Exception("Account balance is zero — add funds")
            raise Exception(f"Submit error: {error}")

        if not resp.text.startswith("OK|"):
            raise Exception(f"Unexpected submit response: {resp.text}")

        task_id = resp.text.split("|")[1]

        # Poll for result
        for _ in range(60):
            time.sleep(5)
            result = requests.get(f"{self.base_url}/res.php", params={
                "key": self.api_key,
                "action": "get",
                "id": task_id
            })

            if result.text.startswith("OK|"):
                return result.text.split("|")[1]

            if result.text == "CAPCHA_NOT_READY":
                continue

            if result.text == "ERROR_CAPTCHA_UNSOLVABLE":
                logger.warning("Captcha unsolvable — will retry with new task")
                return None

            raise Exception(f"Poll error: {result.text}")

        raise Exception("Solve timed out after 5 minutes")

# Usage
solver = InvisibleRecaptchaSolver("YOUR_API_KEY")
token = solver.solve(
    sitekey="6LdKlZEU...",
    page_url="https://staging.example.com/qa-login"
)
print(f"Token: {token[:50]}...")
const axios = require("axios");

class InvisibleRecaptchaSolver {
  constructor(apiKey, maxRetries = 3) {
    this.apiKey = apiKey;
    this.maxRetries = maxRetries;
    this.baseUrl = "https://ocr.captchaai.com";
  }

  async solve(sitekey, pageUrl, proxy) {
    for (let attempt = 1; attempt <= this.maxRetries; attempt++) {
      try {
        const token = await this._attemptSolve(sitekey, pageUrl, proxy);
        if (token) return token;
      } catch (err) {
        console.warn(`Attempt ${attempt} failed: ${err.message}`);
        if (attempt < this.maxRetries) {
          await new Promise((r) => setTimeout(r, 2 ** attempt * 1000));
        }
      }
    }
    throw new Error(`Failed to solve after ${this.maxRetries} attempts`);
  }

  async _attemptSolve(sitekey, pageUrl, proxy) {
    const params = {
      key: this.apiKey,
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: pageUrl,
      invisible: 1,
    };
    if (proxy) {
      params.proxy = proxy;
      params.proxytype = "HTTP";
    }

    // Submit task
    const submitResp = await axios.get(`${this.baseUrl}/in.php`, { params });
    if (submitResp.data.includes("ERROR")) {
      const error = submitResp.data.trim();
      if (["ERROR_WRONG_GOOGLEKEY", "ERROR_KEY_DOES_NOT_EXIST"].includes(error)) {
        throw new Error(`Configuration error (do not retry): ${error}`);
      }
      throw new Error(`Submit error: ${error}`);
    }

    const taskId = submitResp.data.split("|")[1];

    // Poll for result
    for (let i = 0; i < 60; i++) {
      await new Promise((r) => setTimeout(r, 5000));
      const result = await axios.get(`${this.baseUrl}/res.php`, {
        params: { key: this.apiKey, action: "get", id: taskId },
      });

      if (result.data.startsWith("OK|")) {
        return result.data.split("|")[1];
      }
      if (result.data === "CAPCHA_NOT_READY") continue;
      if (result.data === "ERROR_CAPTCHA_UNSOLVABLE") return null;
      throw new Error(`Poll error: ${result.data}`);
    }
    throw new Error("Solve timed out after 5 minutes");
  }
}

// Usage
const solver = new InvisibleRecaptchaSolver("YOUR_API_KEY");
solver.solve("6LdKlZEU...", "https://staging.example.com/qa-login").then((token) => {
  console.log(`Token: ${token.substring(0, 50)}...`);
});

Danh sách kiểm tra khắc phục sự cố

Chạy qua danh sách kiểm tra này khi việc giải quyết reCAPTCHA vô hình không thành công:

Bước Kiểm tra Lệnh/Action
1 Xác nhận là vô hình, không phải chuẩn v2 Tìm data-size="invisible" hoặc size: 'invisible' trong lệnh gọi kết xuất
2 Xác minh khóa trang web là chính xác So sánh cụ thể với data-sitekey về widget vô hình
3 Xác nhận invisible=1 trong yêu cầu API Kiểm tra thông số in.php của bạn
4 Kiểm tra chính xác các trận đấu pageurl Sử dụng URL DevTools của trình duyệt, không phải URL chuyển hướng
5 Tìm tên hàm gọi lại Tìm thuộc tính data-callback hoặc callback trong grecaptcha.render()
6 Xác minh việc tiêm mã thông báo + cuộc gọi lại Cả hai bước đều bắt buộc - chỉ mã thông báo là không đủ
7 Kiểm tra độ mới của mã thông báo Mã thông báo phải được sử dụng trong vòng 120 giây
8 Kiểm tra bằng proxy nếu IP có vấn đề Thêm thông số proxyproxytype

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

ReCAPTCHA vô hình khác với tiêu chuẩn v2 như thế nào trong việc giải quyết?

Phương thức API giống nhau (method=userrecaptcha), nhưng bạn phải thêm invisible=1 vào yêu cầu của mình. Sự khác biệt quan trọng nằm ở phía chèn: reCAPTCHA vô hình hầu như luôn yêu cầu gọi hàm gọi lại JavaScript sau khi chèn mã thông báo, trong khi tiêu chuẩn v2 thường chỉ hoạt động với trường ẩn.

Tại sao mã thông báo của tôi hoạt động được trong quá trình thử nghiệm nhưng lại thất bại trong quá trình sản xuất?

Nhiều khả năng là IP không khớp. Trong quá trình thử nghiệm, bộ giải và trình duyệt của bạn có thể dùng chung IP. Trong quá trình sản xuất, IP của người giải và IP máy chủ của bạn khác nhau. Thêm tham số proxy phù hợp với IP phiên của bạn để khắc phục điều này.

reCAPTCHA vô hình mất bao lâu để giải quyết?

Thời gian giải quyết thông thường là 10-30 giây thông qua CaptchaAI. Các thử thách vô hình thường nhanh hơn thử thách hộp kiểm v2 vì chúng không yêu cầu nhận dạng hình ảnh — chúng dựa vào phân tích rủi ro.

Tôi có thể giải quyết reCAPTCHA vô hình mà không cần trình duyệt không?

Vâng. Vì quá trình giải quyết diễn ra phía máy chủ thông qua API nên bạn chỉ cần khóa trang web và pageurl. Trình duyệt chỉ cần thiết nếu bạn phải thực thi chức năng gọi lại trên trang thực tế. Đối với quy trình làm việc API thuần túy, hãy trích xuất khóa trang web, giải quyết thông qua CaptchaAI và gửi mã thông báo cùng với yêu cầu HTTP của bạn.


Các bước tiếp theo

bài viết liên quan

Os comentários estão desativados para este artigo.