Giải CAPTCHA có bốn thành phần độ trễ: gửi yêu cầu, chờ hàng đợi, thực thi bộ giải và truy xuất cuộc thăm dò. Bạn không thể kiểm soát thời gian thực hiện bộ giải nhưng bạn có thể tối ưu hóa mọi thứ khác.
Độ trễ cơ bản theo loại CAPTCHA
| loại CAPTCHA | Thời gian giải quyết điển hình | Có thể đạt được tốt nhất |
|---|---|---|
| Hình ảnh/OCR | 2-5 giây | 1-3 giây |
| reCAPTCHA v2 | 15-30 giây | 10-20 giây |
| reCAPTCHA v3 | 10-20 giây | 8-15 giây |
| Cloudflare Turnstile | 10-25 giây | 8-15 giây |
| GeeTest v3 | 15-30 giây | 10-20 giây |
Cột "có thể đạt được tốt nhất" phản ánh những gì bạn nhận được sau khi áp dụng các biện pháp tối ưu hóa bên dưới.
1. Tối ưu hóa khoảng thời gian thăm dò ý kiến
Khoảng thời gian thăm dò mặc định là 5 giây sẽ lãng phí thời gian khi quá trình giải quyết hoàn tất giữa các cuộc thăm dò. Sử dụng bỏ phiếu thích ứng — bắt đầu nhanh, sau đó dừng lại:
Python
import time
import requests
API_KEY = "YOUR_API_KEY"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def adaptive_poll(task_id, timeout=120):
"""Start polling at 3s, increase to 5s after 4 polls."""
start = time.time()
interval = 3 # start aggressive
polls = 0
while time.time() - start < timeout:
time.sleep(interval)
polls += 1
resp = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get",
"id": task_id, "json": "1"
}).json()
if resp["status"] == 1:
elapsed = time.time() - start
print(f"Solved in {elapsed:.1f}s ({polls} polls)")
return resp["request"]
if resp["request"] != "CAPCHA_NOT_READY":
raise Exception(resp["request"])
# Back off after initial fast polls
if polls >= 4:
interval = 5
raise TimeoutError(f"Task {task_id} timed out")
JavaScript
async function adaptivePoll(taskId, apiKey, timeout = 120000) {
const start = Date.now();
let interval = 3000;
let polls = 0;
while (Date.now() - start < timeout) {
await new Promise(r => setTimeout(r, interval));
polls++;
const resp = await fetch(
`https://ocr.captchaai.com/res.php?key=${apiKey}&action=get&id=${taskId}&json=1`
);
const data = await resp.json();
if (data.status === 1) {
console.log(`Solved in ${((Date.now() - start) / 1000).toFixed(1)}s (${polls} polls)`);
return data.request;
}
if (data.request !== 'CAPCHA_NOT_READY') {
throw new Error(data.request);
}
if (polls >= 4) interval = 5000;
}
throw new Error(`Task ${taskId} timed out`);
}
Tiết kiệm trung bình 1-4 giây so với khoảng thời gian cố định 5 giây.
2. Tổng hợp kết nối
Sử dụng lại kết nối HTTP thay vì mở kết nối mới cho mỗi cuộc thăm dò:
Python
session = requests.Session()
# Use session.get() and session.post() instead of requests.get/post
# The session reuses TCP connections automatically
JavaScript (Node.js)
const { Agent } = require('http');
const axios = require('axios');
const client = axios.create({
httpAgent: new Agent({ keepAlive: true, maxSockets: 10 }),
timeout: 10000,
});
// Use client.get() and client.post() for all API calls
Tiết kiệm ~50-100 mili giây cho mỗi yêu cầu bằng cách bỏ qua bắt tay TCP/TLS.
3. Tìm nạp trước CAPTCHA
Gửi nhiệm vụ CAPTCHA trước khi bạn cần mã thông báo. Trong khi trình quét của bạn xử lý trang N, hãy gửi CAPTCHA cho trang N+1:
from concurrent.futures import ThreadPoolExecutor
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
def prefetch_submit(sitekey, page_url):
resp = session.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
})
data = resp.json()
if data["status"] == 1:
return data["request"]
raise Exception(data["request"])
# Submit next page's CAPTCHA while processing current page
with ThreadPoolExecutor(max_workers=2) as pool:
# Submit CAPTCHA for page 2 while processing page 1
future_task = pool.submit(prefetch_submit, "6Le-SITEKEY", "https://example.com/page/2")
# Process page 1...
process_page(current_data)
# Now get the pre-submitted task ID and poll
task_id = future_task.result()
token = adaptive_poll(task_id)
Loại bỏ toàn bộ thời gian chờ đợi bằng cách giải quyết chồng chéo với xử lý.
4. Sử dụng đúng phương pháp CAPTCHA
CaptchaAI đôi khi hỗ trợ các phương thức nhanh hơn cho các tình huống cụ thể:
| Kịch bản | Phương pháp chậm | Thay thế nhanh hơn |
|---|---|---|
| reCAPTCHA v2 với lệnh gọi lại đã biết | userrecaptcha + thăm dò ý kiến |
userrecaptcha với pingback (URL gọi lại) |
| Văn bản hình ảnh CAPTCHA | base64 với độ phân giải cao |
base64 với numeric=1 nếu chỉ có chữ số |
5. Bỏ qua proxy khi không cần thiết
Định tuyến proxy thêm độ trễ. Chỉ gửi tham số proxy khi trang đích yêu cầu yêu cầu từ các IP cụ thể:
# Without proxy — faster for most use cases
data = {
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
}
# With proxy — only when required
data["proxy"] = "user:pass@1.2.3.4:8080"
data["proxytype"] = "HTTP"
6. Sử dụng URL gọi lại thay vì bỏ phiếu
Loại bỏ hoàn toàn việc bỏ phiếu bằng tham số pingback:
resp = session.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
"pingback": "https://your-server.com/captcha-callback",
})
CaptchaAI gửi kết quả tới URL của bạn khi quá trình giải hoàn tất. Không cần vòng bỏ phiếu. Đây là phương pháp truy xuất nhanh nhất.
7. Đánh giá các tối ưu hóa của bạn
import statistics
def benchmark(solve_func, iterations=20):
times = []
for i in range(iterations):
start = time.time()
try:
solve_func()
times.append(time.time() - start)
except Exception:
pass
if times:
print(f"Samples: {len(times)}/{iterations}")
print(f"Mean: {statistics.mean(times):.1f}s")
print(f"Median: {statistics.median(times):.1f}s")
print(f"P95: {sorted(times)[int(len(times)*0.95)]:.1f}s")
print(f"Min: {min(times):.1f}s")
print(f"Max: {max(times):.1f}s")
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Độ trễ thăm dò không thay đổi | Vẫn đang sử dụng requests.get() mà không có phiên |
Chuyển sang session.get() |
| Mã thông báo tìm nạp trước hết hạn trước khi sử dụng | Quá trình xử lý mất quá nhiều thời gian | Giảm thời gian tìm nạp trước hoặc gửi gần thời điểm sử dụng hơn |
| URL gọi lại không bao giờ nhận được dữ liệu | Không thể truy cập máy chủ từ CaptchaAI | Đảm bảo URL công khai, đúng quy tắc tường lửa |
| Bỏ phiếu nhanh hơn gây ra giới hạn tỷ lệ | Bỏ phiếu quá tích cực (< 2s) | Giữ khoảng thời gian tối thiểu là 3 giây |
Câu hỏi thường gặp
Tối ưu hóa đơn lẻ lớn nhất là gì?
Đang tìm nạp trước. Nó chồng chéo thời gian giải quyết với thời gian xử lý, giảm độ trễ nhận thấy xuống gần bằng 0 một cách hiệu quả cho các quy trình làm việc tuần tự.
Thăm dò thích ứng có giúp ích cho CAPTCHA hình ảnh không?
Ít hơn như vậy. CAPTCHA hình ảnh giải quyết trong 2-5 giây, vì vậy cuộc thăm dò đầu tiên sau 3 giây thường bắt được chúng. Sự cải thiện rõ rệt hơn đối với reCAPTCHA (15-30 giây).
Giải mã CAPTCHA nhanh nhất với CaptchaAI
Nhận khóa API của bạn tạicaptchaai.com.