Phạm vi an toàn: chỉ áp dụng cho môi trường QA hoặc staging bạn sở hữu hoặc được uỷ quyền.
Chọn WebDriver khi cần chứng minh biểu mẫu staging vẫn submit được trên Chrome, Firefox và Edge; chọn CDP khi cần biết request nào quanh widget CAPTCHA đã hỏng. Khác biệt nằm ở lượng tín hiệu mỗi lần chạy để lại, không ở tỷ lệ giải CAPTCHA — phần đó CaptchaAI xử lý phía server.
Chọn nhanh giữa hai giao thức
| Tình huống trong pipeline QA | Nên dùng | Lý do |
|---|---|---|
| Smoke test trên nhiều trình duyệt | WebDriver | Chuẩn W3C, chạy cả Firefox và Safari |
| Cần biết request nào quanh widget lỗi | CDP | Bật domain Network, đọc từng request |
| Hàng trăm phiên song song trên CI | CDP | Ít overhead mỗi lệnh |
WebDriver: chuẩn W3C cho smoke test biểu mẫu
WebDriver nói chuyện với trình duyệt qua HTTP + JSON, thông qua driver như ChromeDriver. Đổi lại là sự ổn định và khả năng chạy cùng một kịch bản trên nhiều trình duyệt. Nhược điểm: không đọc được request ở tầng mạng nếu thiếu Selenium Wire.
CDP: đọc thẳng tầng network của trang staging
CDP nối trực tiếp tới Chrome bằng WebSocket. Các domain Network, Fetch và Runtime cho phép log từng request của widget CAPTCHA, đọc cookie httpOnly và chạy JavaScript đúng context — hữu ích khi widget nằm trong iframe. Cái giá là CDP chỉ chạy trên Chrome/Chromium.
Luồng lấy token giống nhau ở cả hai bên
Dù chọn giao thức nào, bốn bước sau không đổi:
- Lấy
sitekeyvàpageurltừ trang staging. - Gửi task tới
in.phpkèm API key của bạn. - Polling
res.phpcho tới khi có token. - Đặt token vào field
g-recaptcha-responserồi gọi backend QA để xác thực.
Giao thức chỉ ảnh hưởng bước 1 và bước 4. CaptchaAI trả token reCAPTCHA v2 trong dưới 60 giây, Cloudflare Turnstile dưới 10 giây.
Tình huống ở một đội QA outsourcing
Một công ty ở TP.HCM chạy 40 kịch bản Selenium mỗi đêm trên staging của khách hàng nước ngoài. Khách bật Turnstile ở bước đăng nhập, một nửa số test chuyển đỏ, log chỉ có "timeout chờ selector". Đội giữ WebDriver cho regression và thêm một job CDP nhỏ log request quanh widget. Nguyên nhân lộ ra sau một đêm: backend QA từ chối token vì secret staging lệch với production.
CaptchaAI tính theo thread chứ không theo lượt giải: BASIC ($15/tháng, 5 thread) đủ cho suite tuần tự, ADVANCE ($90/tháng, 50 thread) hợp với pipeline song song. Giá niêm yết bằng USD.
Ví dụ gọi API từ job QA
Đoạn Python dưới đây là luồng tối thiểu để job QA gửi task và nhận kết quả.
import os
import requests
API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL'] # ví dụ https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']
def submit_qa_recaptcha() -> str:
payload = {
'clientKey': API_KEY,
'task': {
'type': 'NoCaptchaTaskProxyless',
'websiteURL': QA_PAGE_URL,
'websiteKey': QA_SITE_KEY,
},
}
response = requests.post(
'https://api.captchaai.com/createTask',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()['taskId']
def fetch_qa_result(task_id: str) -> dict:
payload = {'clientKey': API_KEY, 'taskId': task_id}
response = requests.post(
'https://api.captchaai.com/getTaskResult',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()
Sau đó test ghi token vào form và so phản hồi của backend QA với kỳ vọng.
Ghi log và checklist trước khi bật CI
Lần chạy hỏng mà không để lại dấu vết thì cả hai giao thức đều vô dụng. Mỗi lần chạy nên ghi log có cấu trúc — thời gian lấy token, mã trạng thái HTTP, ID task — nối bằng một correlation id. Log gọn cũng giảm dữ liệu cá nhân trong môi trường test, đúng tinh thần Nghị định 13/2023/NĐ-CP.
- API key nằm trong CI secret hoặc vault, không nằm trong mã nguồn.
- Phạm vi kiểm thử chỉ gồm tài nguyên bạn được uỷ quyền.
- Số phiên song song không vượt quá số thread của gói.
Lỗi hay gặp khi chạy hai giao thức
| Vấn đề | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Test không thấy widget | Selector đổi hoặc widget load muộn | Chờ theo điều kiện thay vì sleep cố định |
ERROR_NO_SLOT_AVAILABLE |
Không còn thread rảnh | Thử lại có backoff hoặc nâng số thread |
| Backend QA từ chối token | Lệch sitekey hoặc secret giữa hai môi trường | Đối chiếu cấu hình backend với widget |
Câu hỏi thường gặp
CaptchaAI có hỗ trợ hCaptcha không?
Không. CaptchaAI giải reCAPTCHA v2/v3 (kể cả Enterprise), Cloudflare Turnstile và Challenge, GeeTest v3, CAPTCHA ảnh/OCR, grid-image, BLS; CaptchaFox, Friendly Captcha, Lemin đang ở giai đoạn beta. hCaptcha, FunCaptcha và GeeTest v4 chưa được hỗ trợ.
Chạy headless có khó lấy token hơn không?
Không. Token được giải phía server nên headless hay có giao diện đều như nhau. Nếu chỉ hỏng ở headless, hãy xem viewport và thời điểm render widget.
Nên đặt trần cho vòng polling ở mức nào?
Gọi res.php mỗi 5 giây; 20 giây là dư cho Turnstile, reCAPTCHA v2 cần trần rộng hơn. Ghi lại số vòng polling để biết khi nào cần thêm thread.
Đọc thêm
- CaptchaAI quickstart
- Kiểm thử CAPTCHA được uỷ quyền
- Kiểm thử endpoint CAPTCHA
- Test trình duyệt hỏng, API vẫn chạy
- Giải reCAPTCHA v2 bằng API
- Giải Cloudflare Turnstile bằng API
- Giải GeeTest v3 bằng API
Lấy API key và kiểm chứng tích hợp CAPTCHA của bạn với CaptchaAI.