Page 1 of 1

Hướng dẫn nhanh API giải Captcha trong 5 phút

Posted: Sat Sep 05, 2026 7:12 am
by omocaptcharoara
Cách giải hCaptcha tự động bằng API

Bạn đang tìm cách giải hCaptcha để tự động hóa quy trình kiểm thử (QA) form đăng nhập, giám sát website hay thu thập dữ liệu được cấp phép? Câu trả lời ngắn gọn: bạn không cần "click chuột" thủ công. Thay vào đó, bạn đọc sitekey cùng URL trang, gửi một task tới API giải hcaptcha của OMOCaptcha, chờ token trả về, rồi chèn token đó vào ô ẩn h-captcha-response để submit form. Bài viết này hướng dẫn toàn bộ luồng token đó với code Python và Node.js hoàn chỉnh, chạy trực tiếp với api.omocaptcha.com/v2.

hCaptcha là gì?

hCaptcha là một dịch vụ captcha tập trung vào quyền riêng tư, được xem như giải pháp thay thế cho reCAPTCHA của Google. Trước đây Cloudflare từng dùng hCaptcha làm challenge mặc định (nay đã chuyển sang Turnstile), và hCaptcha vẫn phổ biến trên rất nhiều website nhờ mô hình bảo vệ dữ liệu và các gói Enterprise.

Về mặt kỹ thuật, hCaptcha hoạt động dựa trên hai giá trị chính:

- sitekey (data-sitekey): mã công khai gắn với website, nằm trong HTML của trang.
- token (h-captcha-response): chuỗi mà hCaptcha trả về sau khi challenge được giải, và là thứ server dùng để xác thực.

Với biến thể Enterprise, đôi khi trang còn kèm tham số rqdata (còn gọi là enterprise payload) mà bạn cần truyền thêm khi tạo task.

Luồng giải hCaptcha bằng API hoạt động ra sao?

Nguyên tắc để giải hcaptcha tự động rất đơn giản và giống nhau cho mọi loại token captcha:

1. Đọc thông tin: lấy websiteURL (URL trang chứa captcha) và websiteKey (chính là sitekey).
2. Tạo task: gọi POST /createTask để gửi thông tin lên OMOCaptcha, nhận về taskId.
3. Poll kết quả: gọi POST /getTaskResult lặp lại cho tới khi status trả về ready.
4. Inject token: điền token vào ô textarea[name="h-captcha-response"] (và g-recaptcha-response nếu widget yêu cầu) rồi submit.

Toàn bộ HTTP status luôn là 200; thành công hay thất bại được quyết định bởi trường errorId (0 nghĩa là thành công), theo chuẩn envelope tương thích AntiCaptcha.

Lưu ý về task type: Ví dụ dưới dùng type HCaptchaTokenTask. Đây là quy ước cho captcha dạng token; bạn hãy xác nhận lại chuỗi type chính xác trong tài liệu API của OMOCaptcha trước khi chạy production.

Ví dụ Python (requests)

Đoạn code sau minh họa đầy đủ cách gọi API, poll lịch sự với backoff và luôn đặt timeout cho mỗi request.

import time
import requests

API_BASE = "https://api.omocaptcha.com/v2"
CLIENT_KEY = "YOUR_API_KEY"

def solve_hcaptcha(website_url: str, website_key: str, rqdata: str • None = None) -> str:
# 1) Tạo task
task = (
"type": "HCaptchaTokenTask", # Xác nhận lại tên type trong docs OMOCaptcha
"websiteURL": website_url,
"websiteKey": website_key,
# Giữ user-agent nhất quán giữa lúc giải và lúc submit
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
)
if rqdata: # hCaptcha Enterprise
task["enterprisePayload"] = ("rqdata": rqdata)

create = requests.post(
f"(API_BASE)/createTask",
json=("clientKey": CLIENT_KEY, "task": task),
timeout=30,
).json()

if create.get("errorId") != 0:
raise RuntimeError(f"createTask lá»—i: (create.get('errorCode')) - (create.get('errorDescription'))")

task_id = create["taskId"]

# 2) Poll kết quả với backoff nhẹ
delay = 3
for _ in range(24): # tối đa ~1-2 phút
time.sleep(delay)
result = requests.post(
f"(API_BASE)/getTaskResult",
json=("clientKey": CLIENT_KEY, "taskId": task_id),
timeout=30,
).json()

if result.get("errorId") != 0:
raise RuntimeError(f"getTaskResult lá»—i: (result.get('errorCode'))")

status = result.get("status")
if status == "ready":
# token thường nằm ở solution.gRecaptchaResponse với hCaptcha/reCAPTCHA
return result["solution"]["gRecaptchaResponse"]
if status == "fail":
raise RuntimeError("Task thất bại, số dư đã được hoàn lại.")

delay = min(delay + 1, 6) # tăng dần, poll lịch sự

raise TimeoutError("Hết thời gian chờ token hCaptcha")

if __name__ == "__main__":
token = solve_hcaptcha(
website_url="https://example.com/login",
website_key="10000000-ffff-ffff-ffff-000000000001",
)
print("hCaptcha token:", token[:40], "...")

Ví dụ Node.js (fetch)

Cùng luồng đó viết bằng JavaScript/Node.js. Dùng AbortController để đảm bảo mọi request đều có timeout.

const API_BASE = "https://api.omocaptcha.com/v2";
const CLIENT_KEY = "YOUR_API_KEY";

async function postJSON(path, body, timeoutMs = 30000) (
const controller = new AbortController();
const t = setTimeout(() => controller.abort(), timeoutMs);
try (
const res = await fetch(`$(API_BASE)$(path)`, (
method: "POST",
headers: ( "Content-Type": "application/json" ),
body: JSON.stringify(body),
signal: controller.signal,
));
return await res.json();
) finally (
clearTimeout(t);
)
)

const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

async function solveHCaptcha(websiteURL, websiteKey, rqdata) (
const task = (
type: "HCaptchaTokenTask", // Xác nhận lại tên type trong docs OMOCaptcha
websiteURL,
websiteKey,
userAgent:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
);
if (rqdata) task.enterprisePayload = ( rqdata );

const create = await postJSON("/createTask", ( clientKey: CLIENT_KEY, task ));
if (create.errorId !== 0) (
throw new Error(`createTask lá»—i: $(create.errorCode) - $(create.errorDescription)`);
)
const taskId = create.taskId;

let delay = 3000;
for (let i = 0; i < 24; i++) (
await sleep(delay);
const result = await postJSON("/getTaskResult", (
clientKey: CLIENT_KEY,
taskId,
));
if (result.errorId !== 0) throw new Error(`getTaskResult lá»—i: $(result.errorCode)`);

if (result.status === "ready") return result.solution.gRecaptchaResponse;
if (result.status === "fail") throw new Error("Task thất bại, số dư đã hoàn lại.");

delay = Math.min(delay + 1000, 6000); // poll lịch sự
)
throw new Error("Hết thời gian chờ token hCaptcha");
)

solveHCaptcha("https://example.com/login", "10000000-ffff-ffff-ffff-000000000001")
.then((token) => console.log("hCaptcha token:", token.slice(0, 40), "..."))
.catch(console.error);

Chèn token vào trang

Sau khi có token, bước cuối để vượt hCaptcha là đưa nó vào DOM rồi submit. Với công cụ tự động như Playwright/Selenium:

await page.evaluate((token) => (
document.querySelector('textarea[name="h-captcha-response"]').value = token;
const g = document.querySelector('textarea[name="g-recaptcha-response"]');
if (g) g.value = token;
), token);

Nếu bạn gọi API backend trực tiếp, chỉ cần gửi token trong tham số h-captcha-response của request.

Mẹo để tỷ lệ thành công cao hơn

- Giữ user-agent nhất quán: dùng cùng một userAgent khi giải captcha và khi submit form. Sự sai lệch dễ bị đánh dấu bất thường.
- Xử lý rqdata cho Enterprise: nếu trang có rqdata, luôn truyền vào enterprisePayload. Thiếu nó token sẽ bị từ chối.
- Poll lịch sự: chờ 3-5 giây giữa các lần getTaskResult, đừng spam liên tục. Backoff nhẹ vừa nhanh vừa ổn định.
- Đúng key-binding: một task bị khóa với API key đã tạo ra nó; dùng sai key sẽ trả ERROR_TASK_KEY_MISMATCH.
- Dùng token ngay: token hCaptcha có thời hạn ngắn (thường khoảng 2 phút), nên submit ngay sau khi nhận.

So sánh nhanh chi phí

Loại captcha • Giá (USD / 1000 lượt)

hCaptcha • $0.60
reCAPTCHA v2 • $0.27
FunCaptcha (Arkose) • $0.27
GeeTest • $0.60
Cloudflare Turnstile • hỗ trợ

OMOCaptcha dùng AI thuần (không có hàng đợi "human farm"), tốc độ giải trung bình 0.42s, độ chính xác lên tới 99% và rẻ hơn khoảng 20-40% so với đối thủ quốc tế. Xem chi tiết ở bảng giá API giải captcha (https://blog.omocaptcha.com/bang-gia-api-giai-captcha) hoặc mục pricing chính thức (https://omocaptcha.com/vi#pricing).

Nếu bạn cũng cần xử lý các loại khác, tham khảo thêm hướng dẫn cách giải reCAPTCHA (https://blog.omocaptcha.com/cach-giai-recaptcha) và giải Cloudflare Turnstile (https://blog.omocaptcha.com/giai-cloudflare-turnstile). Còn nếu đang phân vân chọn nhà cung cấp, đọc bài dịch vụ giải captcha tốt nhất (https://blog.omocaptcha.com/dich-vu-gia ... a-tot-nhat).

Lưu ý sử dụng có trách nhiệm

Hướng dẫn này dành cho các trường hợp tự động hóa hợp pháp: kiểm thử QA/regression trên form của chính bạn, hỗ trợ tiếp cận (accessibility), giám sát uptime, load testing, hay thu thập dữ liệu được cấp phép/hợp đồng. Hãy tôn trọng robots.txt, điều khoản dịch vụ (ToS) và giới hạn tần suất của website. Đừng dùng để tạo tài khoản giả hàng loạt, gian lận hay né tránh lệnh cấm. Bạn có thể tìm hiểu thêm về hCaptcha tại tài liệu chính thức của hCaptcha (https://docs.hcaptcha.com/).

FAQ

Task type chính xác cho hCaptcha là gì?
Ví dụ trong bài dùng HCaptchaTokenTask theo quy ước token captcha. Vì đây không phải type đã được xác nhận cứng, bạn nên kiểm tra lại chuỗi type chính xác trong tài liệu API của OMOCaptcha trước khi triển khai production.

Token hCaptcha nằm ở đâu trong solution?
Với hCaptcha (và reCAPTCHA), token thường nằm ở solution.gRecaptchaResponse. Một số loại captcha khác trả token ở solution.token. Cứ đọc đúng trường tương ứng sau khi status là ready.

hCaptcha Enterprise có giải được không?
Được. Nếu trang có tham số rqdata, hãy truyền nó qua enterprisePayload khi tạo task. Đây là bước bắt buộc để token Enterprise được chấp nhận.

Vì sao token bị từ chối dù giải thành công?
Nguyên nhân phổ biến nhất là user-agent không khớp giữa lúc giải và lúc submit, token hết hạn do submit quá trễ, hoặc thiếu rqdata với biến thể Enterprise.

Giá giải hcaptcha bằng python có khác Node.js không?
Không. Giá tính theo số lượt giải (hCaptcha là $0.60/1000), không phụ thuộc ngôn ngữ. Bạn dùng hcaptcha python hay Node.js đều gọi chung một endpoint và chung mức giá.

Bắt đầu ngay hôm nay

Đăng ký OMOCaptcha để nhận 1000 lượt giải miễn phí và tự động hóa hCaptcha chỉ trong vài phút với API, 6 SDK và tài liệu đầy đủ. Nếu tỷ lệ thành công dưới 95%, bạn được hoàn tiền theo cam kết SLA.

Xem thêm hướng dẫn nhanh API giải captcha (https://blog.omocaptcha.com/huong-dan-n ... ai-captcha) để tích hợp trong 5 phút, hoặc truy cập ngay trang chủ OMOCaptcha (https://omocaptcha.com/vi?utm_source=bl ... um=organic). Có thắc mắc kỹ thuật? Email đội ngũ hỗ trợ 24/7 tại support@omocaptcha.com.