Khi bạn chạy quá nhiều tác vụ CAPTCHA song song, CaptchaAI sẽ trả về ERROR_NO_SLOT_AVAILABLE. Điều này có nghĩa là bạn đã vượt quá giới hạn nhiệm vụ đồng thời của tài khoản. Hướng dẫn này giải thích các giới hạn, cách xử lý chúng và cách tối đa hóa thông lượng mà không đạt đến giới hạn.
Triệu chứng
| Những gì bạn nhìn thấy | nguyên nhân |
|---|---|
ERROR_NO_SLOT_AVAILABLE |
Quá nhiều nhiệm vụ đang hoạt động cùng một lúc |
| Phản hồi HTTP 429 | Quá nhiều yêu cầu mỗi giây tới điểm cuối API |
| Một số nhiệm vụ thành công, số khác thất bại | Đạt đến giới hạn không liên tục |
| Số lần giải quyết tăng lên | Tắc nghẽn hàng đợi trên tài khoản của bạn |
Hiểu các giới hạn
CaptchaAI có hai loại giới hạn tỷ lệ:
| Loại giới hạn | Những gì nó kiểm soát | Lỗi |
|---|---|---|
| Nhiệm vụ đồng thời | Số lượng nhiệm vụ tối đa được giải quyết đồng thời | ERROR_NO_SLOT_AVAILABLE |
| Tỷ lệ yêu cầu | Số lệnh gọi API tối đa mỗi giây để gửi điểm cuối/poll | HTTP 429 |
Giới hạn nhiệm vụ đồng thời của bạn phụ thuộc vào kế hoạch của bạn. Kiểm tra bảng điều khiển của bạn tạicaptchaai.comcho giới hạn hiện tại của bạn.
Cách khắc phục 1: Thêm semaphore để hạn chế đồng thời
Kiểm soát số lượng tác vụ chạy song song:
import requests
import time
import threading
API_KEY = "YOUR_API_KEY"
MAX_CONCURRENT = 20 # Stay below your account limit
semaphore = threading.Semaphore(MAX_CONCURRENT)
def solve_captcha(params):
"""Solve a CAPTCHA with concurrency control."""
with semaphore:
params["key"] = API_KEY
params["json"] = 1
submit = requests.post("https://ocr.captchaai.com/in.php", data=params).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit: {submit.get('request')}")
task_id = submit["request"]
time.sleep(10)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve: {result['request']}")
time.sleep(5)
raise TimeoutError("Timed out")
Cách khắc phục 2: Thử lại ERROR_NO_SLOT_AVAILABLE
Khi bạn đạt đến giới hạn, hãy đợi và thử lại thay vì thất bại ngay lập tức:
def submit_with_retry(params, max_retries=5):
"""Submit with automatic retry for slot errors."""
params["key"] = API_KEY
params["json"] = 1
for attempt in range(max_retries):
resp = requests.post("https://ocr.captchaai.com/in.php", data=params).json()
if resp.get("status") == 1:
return resp["request"]
error = resp.get("request", "")
if error == "ERROR_NO_SLOT_AVAILABLE":
wait = 2 ** attempt # Exponential backoff: 1, 2, 4, 8, 16 seconds
print(f"No slot available, retrying in {wait}s (attempt {attempt + 1})")
time.sleep(wait)
continue
else:
raise RuntimeError(f"Submit error: {error}")
raise RuntimeError("Max retries exceeded — no slots available")
Cách khắc phục 3: Sử dụng hàng đợi tác vụ
Thay vì làm tràn ngập API, hãy xếp hàng các tác vụ và xử lý chúng ở tốc độ được kiểm soát:
from queue import Queue
from threading import Thread
task_queue = Queue()
results = {}
def worker():
while True:
task_id_local, params = task_queue.get()
try:
token = solve_captcha(params)
results[task_id_local] = {"status": "ok", "token": token}
except Exception as e:
results[task_id_local] = {"status": "error", "message": str(e)}
finally:
task_queue.task_done()
# Start worker threads (limited by semaphore)
for _ in range(MAX_CONCURRENT):
t = Thread(target=worker, daemon=True)
t.start()
# Add tasks to queue
captcha_tasks = [
{"method": "userrecaptcha", "googlekey": "KEY1", "pageurl": "https://site1.com"},
{"method": "userrecaptcha", "googlekey": "KEY2", "pageurl": "https://site2.com"},
# ... more tasks
]
for i, params in enumerate(captcha_tasks):
task_queue.put((i, params))
task_queue.join()
print(f"Completed: {len(results)} tasks")
Cách 4: Giảm tần suất bỏ phiếu
Bỏ phiếu quá thường xuyên sẽ lãng phí lệnh gọi API và có thể kích hoạt giới hạn tốc độ:
# WRONG — polling every 1 second
time.sleep(1)
# CORRECT — poll every 5 seconds
time.sleep(5)
# BETTER — wait longer on initial delay, then poll
time.sleep(15) # Initial wait
for _ in range(20):
# ... poll
time.sleep(5)
Giám sát các nhiệm vụ đang hoạt động
Theo dõi số lượng tác vụ hiện đang hoạt động:
active_count = 0
lock = threading.Lock()
def track_solve(params):
global active_count
with lock:
active_count += 1
print(f"Active tasks: {active_count}/{MAX_CONCURRENT}")
try:
return solve_captcha(params)
finally:
with lock:
active_count -= 1
Câu hỏi thường gặp
Giới hạn nhiệm vụ đồng thời mặc định là gì?
Nó phụ thuộc vào kế hoạch tài khoản của bạn. Kiểm tra bảng điều khiển CaptchaAI để biết giới hạn hiện tại của bạn. Bạn có thể tăng nó bằng cách nâng cấp kế hoạch của bạn.
Việc bỏ phiếu có được tính vào giới hạn tỷ lệ không?
Vâng. Mỗi yêu cầu res.php đều được tính. Thăm dò cứ sau 5 giây, không phải cứ sau 1 giây.
Tôi có thể tăng giới hạn sử dụng đồng thời của mình không?
Vâng. Hãy liên hệ với bộ phận hỗ trợ CaptchaAI hoặc nâng cấp gói của bạn để tăng số lượng nhiệm vụ đồng thời tối đa.
Sự khác biệt giữa ERROR_NO_SLOT_AVAILABLE và HTTP 429 là gì?
ERROR_NO_SLOT_AVAILABLE có nghĩa là có quá nhiều nhiệm vụ đang được giải quyết. HTTP 429 có nghĩa là có quá nhiều yêu cầu API mỗi giây (thậm chí chỉ là thăm dò ý kiến). Cả hai đều yêu cầu lùi lại.
Mở rộng khả năng giải quyết của bạn tại CaptchaAI
Tối đa hóa thông lượng tạicaptchaai.com.