So Sánh

Tại sao các nhà phát triển chuyển từ Anti-Captcha sang CaptchaAI

Phần lớn các đội không rời Anti-Captcha vì giá. Họ rời đi vào đúng cái đêm pipeline dừng trước một trang Cloudflare Challenge, hoặc khi gặp cổng thông tin dùng BLS CAPTCHA — loại Anti-Captcha không có method để gọi. Dưới đây là bốn điểm quyết định và lộ trình chuyển đổi chạy trong một buổi chiều.

So sánh nhanh CaptchaAI và Anti-Captcha

Tính năng CaptchaAI Anti-Captcha
reCAPTCHA v2 / v3 / Enterprise
Cloudflare Turnstile / GeeTest v3
Cloudflare Challenge / JS Challenge
GeeTest v4 ❌ Sắp ra mắt
hCaptcha ❌ Chưa hỗ trợ
BLS
Hình ảnh/OCR ✅ 27.500+ biến thể
CaptchaFox / Friendly Captcha / Lemin ✅ Beta Không chính thức
Định dạng API REST tương thích 2Captcha JSON task tùy chỉnh

Bảng giữ cả những ô CaptchaAI thua: hCaptcha và FunCaptcha (Arkose Labs) không được hỗ trợ, GeeTest v4 mới sắp ra mắt.

Cloudflare Challenge: khoảng cách lớn nhất

Cloudflare không chỉ có Turnstile. Anti-Captcha trả token Turnstile ổn (invisible hỗ trợ hạn chế) nhưng không xử lý được trang Challenge và JS Challenge — job gặp trang này dừng hẳn chứ không chỉ chậm đi. Log đầy HTML kèm dòng "Just a moment..." thay vì JSON nghĩa là bạn đang gặp trang Challenge, không phải widget Turnstile.

Định dạng API: JSON task tùy chỉnh và REST tương thích 2Captcha

Anti-Captcha dùng API dạng task: mỗi loại CAPTCHA là một type, gửi tới createTask rồi hỏi kết quả ở getTaskResult.

# Anti-Captcha — custom JSON format
import requests

resp = requests.post("https://api.anti-captcha.com/createTask", json={
    "clientKey": "ANTICAPTCHA_KEY",
    "task": {
        "type": "RecaptchaV2TaskProxyless",
        "websiteURL": "https://example.com",
        "websiteKey": "SITE_KEY",
    }
})
task_id = resp.json()["taskId"]

# Poll with different endpoint and format
result = requests.post("https://api.anti-captcha.com/getTaskResult", json={
    "clientKey": "ANTICAPTCHA_KEY",
    "taskId": task_id,
})

CaptchaAI dùng REST tương thích 2Captcha: gửi form tới in.php, nhận ID task, polling res.php tới khi có token.

# CaptchaAI — standard 2Captcha-compatible format
import requests

resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "json": 1,
})
task_id = resp.json()["request"]

# Standard polling
result = requests.get("https://ocr.captchaai.com/res.php", params={
    "key": "YOUR_API_KEY",
    "action": "get",
    "id": task_id,
    "json": 1,
})

Khác biệt thực tế nằm ở hệ sinh thái: định dạng 2Captcha được hàng trăm thư viện và framework hỗ trợ sẵn, nên nếu dự án đang gọi qua một wrapper tương thích 2Captcha, việc chuyển thường chỉ là đổi API key và base URL.

BLS CAPTCHA và các cổng thông tin hành chính

Cổng dịch vụ công, hệ thống đặt lịch hẹn visa và dữ liệu lao động dùng BLS CAPTCHA — Anti-Captcha không có method cho loại này, còn CaptchaAI chỉ cần đổi method:

# CaptchaAI — BLS with a high success rate
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": "YOUR_API_KEY",
    "method": "bls",
    "pageurl": "https://bls-portal.example.com",
    "sitekey": "BLS_SITE_KEY",
    "json": 1,
})

Với đội làm dịch vụ đặt lịch, riêng dòng method=bls thường là toàn bộ lý do chuyển đổi — và chỉ dùng nó trên những luồng bạn được phép truy cập.

Điểm reCAPTCHA v3 quan trọng hơn việc giải được

reCAPTCHA v3 không chặn hay cho qua, nó trả về một điểm số — điểm thấp khiến backend tự bật thêm lớp kiểm tra. Cách giải có người tham gia của Anti-Captcha cho điểm dao động, thường quanh 0,3–0,5; CaptchaAI giữ điểm ổn định hơn trong đo đạc nội bộ. Dù chọn bên nào, hãy log lại điểm mà backend của bạn thực nhận.

Tốc độ giải theo từng loại CAPTCHA

Số liệu dưới đây dựa trên đo đạc nội bộ và báo cáo từ người dùng tại thời điểm ghi nhận. Kết quả thực tế thay đổi theo môi trường, khối lượng và thời điểm.

Loại CAPTCHA CaptchaAI Anti-Captcha
CAPTCHA hình ảnh <0,5 giây 5–15 giây
reCAPTCHA v3 <4 giây 10–30 giây
Cloudflare Turnstile <10 giây 10–30 giây
reCAPTCHA v2 <60 giây 15–45 giây

Cột CaptchaAI là trần SLA công bố, cột Anti-Captcha là khoảng thời gian người dùng báo cáo — dưới 60 giây với reCAPTCHA v2 là trần xấu nhất, không phải trung bình.

Một tình huống quen thuộc ở thị trường Việt Nam

Một team QA thuê ngoài ở TP.HCM chạy regression hằng đêm cho khách thương mại điện tử: bot đăng nhập bản staging, kiểm tra luồng giỏ hàng, đối chiếu giá trên trang danh mục công khai của Shopee, Lazada, Tiki. Khách bật Cloudflare, thế là trang Challenge chặn sạch job đêm và hoá đơn theo lượt giải phình lên theo số lần retry.

Gói theo thread bán số luồng giải đồng thời chứ không bán từng lượt, nên chi phí tháng giữ nguyên. Với team QA nhỏ, BASIC ($15/tháng, 5 thread) đủ cho job chạy đêm; pipeline scraping liên tục thường bắt đầu từ ADVANCE ($90/tháng, 50 thread). Giá niêm yết bằng USD, thanh toán bằng thẻ quốc tế. Nếu lưu dữ liệu thu thập, hãy giữ nhật ký truy cập theo tinh thần Nghị định 13/2023/NĐ-CP.

Lộ trình chuyển đổi không cần dừng dự án

Hai API không giống nhau, đừng thay thẳng URL trong code cũ. Bọc cả hai sau một lớp solver duy nhất rồi chạy song song vài ngày:

import requests
import time

class CaptchaSolver:
    """Unified solver — supports Anti-Captcha and CaptchaAI."""

    def __init__(self, provider="captchaai", api_key="YOUR_API_KEY"):
        self.provider = provider
        self.api_key = api_key

    def solve_recaptcha_v2(self, sitekey, pageurl):
        if self.provider == "captchaai":
            return self._solve_captchaai("userrecaptcha", sitekey, pageurl)
        else:
            return self._solve_anticaptcha(sitekey, pageurl)

    def _solve_captchaai(self, method, sitekey, pageurl):
        resp = requests.post("https://ocr.captchaai.com/in.php", data={
            "key": self.api_key,
            "method": method,
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": 1,
        })
        task_id = resp.json()["request"]

        for _ in range(60):
            time.sleep(5)
            result = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": self.api_key, "action": "get",
                "id": task_id, "json": 1,
            })
            data = result.json()
            if data["request"] != "CAPCHA_NOT_READY":
                return data["request"]

        raise TimeoutError("Solve timeout")

    def _solve_anticaptcha(self, sitekey, pageurl):
        resp = requests.post("https://api.anti-captcha.com/createTask", json={
            "clientKey": self.api_key,
            "task": {
                "type": "RecaptchaV2TaskProxyless",
                "websiteURL": pageurl,
                "websiteKey": sitekey,
            },
        })
        task_id = resp.json()["taskId"]

        for _ in range(60):
            time.sleep(5)
            result = requests.post(
                "https://api.anti-captcha.com/getTaskResult",
                json={"clientKey": self.api_key, "taskId": task_id},
            )
            data = result.json()
            if data["status"] == "ready":
                return data["solution"]["gRecaptchaResponse"]

        raise TimeoutError("Solve timeout")
  1. Đặt provider="captchaai" mặc định cho mọi job mới.
  2. Chuyển một phần traffic của job cũ sang CaptchaAI, so sánh tỷ lệ giải thành công trong log của bạn.
  3. Đổi nốt phần còn lại, giữ key Anti-Captcha thêm một chu kỳ hoá đơn để có đường lùi.
  4. Gỡ nhánh _solve_anticaptcha khi log sạch lỗi khoảng một tuần.

Khắc phục sự cố sau khi chuyển

Triệu chứng Nguyên nhân Cách xử lý
Request bị từ chối ngay Vẫn gửi JSON task kiểu cũ Gửi form POST tới in.php
Thiếu trường method Loại CAPTCHA nằm trong type Dùng method=userrecaptcha, turnstile, bls
Polling không trả kết quả Gọi nhầm endpoint GET res.php với action=getid từ in.php

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

CaptchaAI có giải hCaptcha và GeeTest v4 như Anti-Captcha không?

Không. CaptchaAI hiện không hỗ trợ hCaptcha và FunCaptcha (Arkose Labs), GeeTest v4 mới ở trạng thái sắp ra mắt. Danh sách hỗ trợ gồm reCAPTCHA v2/v3 (kể cả Enterprise), Cloudflare Turnstile và Challenge, GeeTest v3, BLS, CAPTCHA hình ảnh và grid, cùng CaptchaFox, Friendly Captcha và Lemin ở bản beta.

Giải 20.000 CAPTCHA mỗi ngày thì cần bao nhiêu thread?

Tính theo số request đồng thời chứ không theo tổng lượt mỗi ngày, vì CaptchaAI bán thread chứ không bán lượt giải. Với reCAPTCHA v2 (trần dưới 60 giây), một thread chạy liên tục xử lý tối đa khoảng 1.400 lượt/ngày, nên 20.000 lượt/ngày cần khoảng 15 thread — tức STANDARD ($30/tháng, 15 thread).

Có thể chạy song song hai dịch vụ trong lúc chuyển đổi không?

Có, và nên làm vậy. Lớp bọc ở trên chọn nhà cung cấp bằng một tham số, nên bạn chuyển dần từng job thay vì đổi tất cả trong một lần deploy. Tham số proxy cũng giữ nguyên logic: CaptchaAI nhận proxyproxytype ngay trong request gửi tới in.php.

Đọc thêm

Lấy API key và chạy thử luồng Cloudflare Challenge cùng BLS của bạn với CaptchaAI trước khi chuyển toàn bộ dự án.

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