Khi tỷ lệ giải quyết của bạn giảm xuống, đừng đoán mò - hãy làm theo chẩn đoán có hệ thống này để tìm và khắc phục nguyên nhân gốc rễ.
Sơ đồ chẩn đoán
Success rate dropped
│
├── Are tokens being generated?
│ ├── NO → Check API errors
│ │ ├── ERROR_WRONG_GOOGLEKEY → Sitekey changed. Re-extract.
│ │ ├── ERROR_BAD_PARAMETERS → Check required params
│ │ ├── ERROR_NO_SLOT → Retry with backoff
│ │ └── Other errors → See error decision tree
│ │
│ └── YES → Tokens generated but rejected by target site
│ │
│ ├── Token expired before use?
│ │ └── YES → Submit token faster (< 60-120s)
│ │
│ ├── Token used for wrong domain?
│ │ └── YES → Check pageurl matches submission domain
│ │
│ ├── reCAPTCHA v3 score too low?
│ │ └── YES → Check action parameter, try min_score
│ │
│ ├── Site changed CAPTCHA type?
│ │ └── YES → Re-detect CAPTCHA type
│ │
│ └── Site added additional checks?
│ └── YES → Check for fingerprinting, cookies, headers
Bước 1: Đo lường tỷ lệ hiện tại của bạn
import requests
import time
from collections import defaultdict
class SuccessTracker:
"""Track solve success rates over time."""
def __init__(self):
self.stats = defaultdict(lambda: {"attempts": 0, "success": 0, "errors": defaultdict(int)})
def record(self, method, success, error_code=None):
self.stats[method]["attempts"] += 1
if success:
self.stats[method]["success"] += 1
elif error_code:
self.stats[method]["errors"][error_code] += 1
def report(self):
for method, data in self.stats.items():
rate = data["success"] / data["attempts"] * 100 if data["attempts"] > 0 else 0
print(f"\n{method}:")
print(f" Attempts: {data['attempts']}")
print(f" Success: {data['success']} ({rate:.1f}%)")
if data["errors"]:
print(" Errors:")
for err, count in sorted(data["errors"].items(), key=lambda x: -x[1]):
print(f" {err}: {count}")
tracker = SuccessTracker()
Bước 2: Xác định danh mục vấn đề
Loại A: Lỗi cấp độ API
API CaptchaAI trả về lỗi thay vì mã thông báo.
def diagnose_api_failures(api_key, method, params, attempts=10):
"""Run test solves and collect error patterns."""
errors = defaultdict(int)
successes = 0
for i in range(attempts):
try:
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key, "method": method, "json": 1, **params,
}, timeout=30)
result = resp.json()
if result.get("status") != 1:
errors[result.get("request", "UNKNOWN")] += 1
continue
task_id = result["request"]
# Quick poll
time.sleep(15)
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key, "action": "get",
"id": task_id, "json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
successes += 1
else:
errors[data.get("request", "POLL_ERROR")] += 1
except Exception as e:
errors[f"EXCEPTION:{type(e).__name__}"] += 1
time.sleep(2)
print(f"\nResults: {successes}/{attempts} success")
for err, count in sorted(errors.items(), key=lambda x: -x[1]):
print(f" {err}: {count}")
Loại B: Từ chối mã thông báo
CaptchaAI trả về mã thông báo hợp lệ nhưng trang đích từ chối nó.
Các nguyên nhân thường gặp:
| nguyên nhân | Kiểm tra |
|---|---|
| Mã thông báo đã hết hạn | Sử dụng mã thông báo> 120 giây sau khi tạo |
| Tên miền không khớp | pageurl không khớp với tên miền gửi |
| điểm v3 quá thấp | Trang web yêu cầu 0,7+ nhưng người giải được 0,3 |
| Thiếu hành động | v3 yêu cầu tham số hành động phù hợp |
| Thông số trang web đã thay đổi | Cấu trúc trang hoặc khóa trang đã thay đổi |
Bước 3: Khắc phục các sự cố thường gặp
Khắc phục: Mã thông báo hết hạn
def solve_and_use_immediately(api_key, sitekey, pageurl):
"""Solve and use token as fast as possible."""
# Submit
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
}, timeout=30)
task_id = resp.json()["request"]
# Poll aggressively
for _ in range(24):
time.sleep(5)
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key, "action": "get",
"id": task_id, "json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
token = data["request"]
# USE IMMEDIATELY — don't store for later
submit_form(token)
return True
return False
Khắc phục: Sitekey cũ
def solve_with_fresh_params(api_key, pageurl):
"""Re-extract sitekey before each solve."""
import re
resp = requests.get(pageurl, timeout=15)
match = re.search(r'data-sitekey="([^"]+)"', resp.text)
if not match:
raise RuntimeError("Could not find sitekey")
sitekey = match.group(1)
# Now solve with fresh sitekey
# ...
Sửa lỗi: Tham số hành động v3
# Check what action the site uses
# Look for: grecaptcha.execute('sitekey', {action: 'submit'})
data = {
"key": api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"version": "v3",
"action": "submit", # Must match site's action
"min_score": "0.7",
"json": 1,
}
Tỷ lệ thành công dự kiến
| Loại CAPTCHA | Tỷ lệ bình thường | Ngưỡng cảnh báo |
|---|---|---|
| reCAPTCHA v2 | 95-99% | Dưới 90% |
| reCAPTCHA v3 | 90-98% | Dưới 85% |
| Cloudflare Turnstile | 99-100% | Dưới 95% |
| GeeTest v3 | 99-100% | Dưới 95% |
| BLS | 99-100% | Dưới 95% |
| Hình ảnh/OCR | 90-98% | Dưới 85% |
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Tỷ lệ giảm từ 98% xuống 70% | Mã trang web hoặc trang đã thay đổi | Trích xuất lại tất cả các thông số |
| tất cả các mã thông báo v3 đều bị từ chối | Tham số hành động sai | So khớp hành động từ nguồn trang |
| Mã thông báo hoạt động nhưng hết hạn | Sử dụng quá chậm | Gửi mã thông báo trong vòng 60 giây |
| Tỷ giá thay đổi theo thời gian trong ngày | Giới hạn tốc độ phía máy chủ | Thêm độ trễ giữa các lần gửi |
Câu hỏi thường gặp
Tỷ lệ thành công bình thường là bao nhiêu?
95%+ cho hầu hết các loại CAPTCHA. Nếu bạn luôn ở mức dưới 90% thì có thể có vấn đề về thông số hoặc thời gian.
Tôi cần sử dụng token nhanh đến mức nào?
Mã thông báo reCAPTCHA sẽ hết hạn sau 120 giây. Mã thông báo quay vòng trong 300 giây. Sử dụng mã thông báo trong vòng 60 giây để có kết quả tốt nhất.
Tôi có nên báo cáo các giải pháp không chính xác?
Vâng. Sử dụng điểm cuối reportbad để báo cáo các giải pháp không chính xác. CaptchaAI sử dụng phản hồi này để cải thiện độ chính xác.
Hướng dẫn liên quan
Chẩn đoán nhanh, giải quyết tốt hơn —sử dụng CaptchaAI.