Hướng Dẫn API

Cách Giải reCAPTCHA v2 Bằng API: Hướng Dẫn Từng Bước

reCAPTCHA v2 vẫn là một trong những rào cản phổ biến nhất ở các luồng đăng nhập, đăng ký, thanh toán và gửi form. Khi automation gặp checkbox hoặc challenge ảnh của reCAPTCHA v2, bạn có thể giải qua API trong bốn bước: trích xuất sitekeypageurl khỏi trang, gửi đến bộ giải reCAPTCHA v2 của CaptchaAI, đợi kết quả rồi chèn token vào luồng được bảo vệ.

Hướng dẫn này dành cho dev cần một tích hợp chạy được, không phải tổng quan lý thuyết.

Chưa chắc reCAPTCHA phiên bản nào? Đọc trước Cách Nhận Diện Phiên Bản reCAPTCHA.


Cần chuẩn bị trước khi bắt đầu

Yêu cầu Chi tiết
API key CaptchaAI Lấy ở captchaai.com/api.php. 32 ký tự.
URL trang đầy đủ URL chính xác nơi widget reCAPTCHA v2 được tải.
sitekey Khóa công khai gắn với widget trên trang đó.
HTTP client requests, axios, fetch, curl — tuỳ ý.
Thread đang hoạt động Tài khoản phải có thread khả dụng.

Bước 1: trích xuất sitekeypageurl

pageurl là URL đầy đủ của trang chứa reCAPTCHA. Luôn truyền kèm https://.

Có ba cách lấy sitekey:

1. Trong HTML — tìm <div class="g-recaptcha" data-sitekey="...">:

<div class="g-recaptcha" data-sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"></div>

2. Trong URL iframehttps://www.google.com/recaptcha/api2/anchor?ar=1&k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&... — tham số k= chính là sitekey.

3. Trong network traffic — DevTools → Network, lọc recaptcha, tham số k xuất hiện ở bất kỳ request nào.


Bước 2: gửi task

import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://staging.example.com/qa-login"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": SITEKEY,
    "pageurl": PAGEURL,
    "json": 1,
}).json()

assert submit["status"] == 1, submit
task_id = submit["request"]
print("task id:", task_id)

Bản Node.js:

const r = await fetch("https://ocr.captchaai.com/in.php", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    key: API_KEY,
    method: "userrecaptcha",
    googlekey: SITEKEY,
    pageurl: PAGEURL,
    json: "1",
  }),
});
const { status, request: taskId } = await r.json();
if (status !== 1) throw new Error(taskId);

reCAPTCHA invisible? Thêm invisible=1. Chi tiết tại Cách hoạt động của reCAPTCHA invisible.


Bước 3: polling kết quả

reCAPTCHA v2 thường mất 15–60 giây. Đợi 20 giây rồi polling mỗi 5 giây.

import time

time.sleep(20)
while True:
    res = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if res.get("request") == "CAPCHA_NOT_READY":
        time.sleep(5)
        continue

    if res.get("status") == 1:
        token = res["request"]
        print("token:", token[:60], "…")
        break

    raise RuntimeError(res)

Token trả về là chuỗi dài, thường bắt đầu bằng 03AGdBq25....


Bước 4: chèn token vào trang

Cách thực hiện tuỳ vào site. Phổ biến nhất là textarea g-recaptcha-response:

document.querySelector('textarea[name="g-recaptcha-response"]').value = token;
document.querySelector("form").submit();

Selenium:

driver.execute_script(
    "document.querySelector('[name=\"g-recaptcha-response\"]').value = arguments[0];",
    token,
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

Playwright:

await page.evaluate((t) => {
  document.querySelector('[name="g-recaptcha-response"]').value = t;
}, token);
await page.click('button[type="submit"]');

Nếu widget có data-callback, gọi luôn hàm đó:

const callback = document.querySelector(".g-recaptcha").dataset.callback;
if (callback && window[callback]) window[callback](token);

Ví dụ hoàn chỉnh (Python)

import time
import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://staging.example.com/qa-login"

def solve_recaptcha_v2():
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": SITEKEY, "pageurl": PAGEURL, "json": 1,
    }).json()
    if submit["status"] != 1:
        raise RuntimeError(submit)
    task_id = submit["request"]

    time.sleep(20)
    for _ in range(40):
        res = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1,
        }).json()
        if res.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue
        if res.get("status") == 1:
            return res["request"]
        raise RuntimeError(res)
    raise TimeoutError("solve timed out")

if __name__ == "__main__":
    token = solve_recaptcha_v2()
    print("token:", token[:80])

Lỗi thường gặp và cách xử lý

Lỗi Nguyên nhân Cách xử lý
ERROR_GOOGLEKEY sitekey rỗng/sai Trích xuất lại sitekey từ trang hiện tại
ERROR_PAGEURL Thiếu pageurl Gửi URL đầy đủ kèm scheme
ERROR_ZERO_BALANCE Hết thread Nạp thêm hoặc đợi giải phóng
ERROR_CAPTCHA_UNSOLVABLE Site siết chặt thử thách Thử lại sau vài giây; xem lỗi giải reCAPTCHA v2 thường gặp
Site từ chối token Token đã hết hạn Dùng trong vòng ~110 giây sau khi nhận

Khi không cách nào hoạt động

  • Có token nhưng site vẫn chặn — form có handler riêng. Tìm callback và gọi thay vì chỉ điền textarea.
  • Cần giữ cùng fingerprint — gửi cùng cookie và User-Agent đã dùng khi xin token.
  • reCAPTCHA phụ thuộc proxy — thêm proxyproxytype vào submit để bộ giải dùng pool IP của bạn.

Bước tiếp theo

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