Việc giải BLS CAPTCHA có những thách thức đặc biệt vì nó sử dụng cách triển khai tùy chỉnh. Dưới đây là những lỗi phổ biến nhất và giải pháp của họ.
Lỗi gửi API
ERROR_BAD_PARAMETERS
Lý do: Thiếu tham số bắt buộc — hướng dẫn hoặc hình ảnh.
Sửa chữa:
# WRONG — missing instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"image_base64_1": img1, "json": 1
})
# CORRECT — include instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"instructions": "Select all images with a car",
"image_base64_1": img1, "json": 1
})
ERROR_WRONG_FILE_EXTENSION
Lý do: Dữ liệu hình ảnh không hợp lệ base64 hoặc là định dạng không được hỗ trợ.
Sửa chữa:
- Đảm bảo hình ảnh được mã hóa base64 PNG hoặc JPEG
- Xóa tiền tố
data:image/...;base64, - Xác minh chuỗi base64 không bị cắt ngắn
import base64
# Strip the data URI prefix
src = img_element.get_attribute("src")
if src.startswith("data:image"):
b64 = src.split(",")[1]
else:
# Download and encode
img_data = requests.get(src).content
b64 = base64.b64encode(img_data).decode()
ERROR_CAPTCHA_UNSOLVABLE
Lý do: Hình ảnh chất lượng quá thấp, mờ hoặc hướng dẫn không rõ ràng.
Sửa chữa:
- Chụp ảnh ở độ phân giải đầy đủ
- Đảm bảo văn bản hướng dẫn được trích xuất chính xác
- Thử lại - một số thử thách vốn đã khó khăn hơn
Lỗi trích xuất hình ảnh
Hình ảnh tải động
Vấn đề: Hình ảnh không có trong DOM khi trang tải lần đầu.
Khắc phục: Đợi hình ảnh xác thực hiển thị đầy đủ:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Wait for captcha images to load
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".captcha-image img"))
)
Hình ảnh là canvas, không phải phần tử img
Vấn đề: Một số triển khai BLS hiển thị hình ảnh trên các phần tử <canvas>.
Khắc phục: Trích xuất dữ liệu canvas dưới dạng base64:
canvas_elements = driver.find_elements(By.CSS_SELECTOR, ".captcha-canvas")
for i, canvas in enumerate(canvas_elements, 1):
b64 = driver.execute_script(
"return arguments[0].toDataURL('image/png').split(',')[1];",
canvas
)
payload[f"image_base64_{i}"] = b64
Hình ảnh đằng sau việc chống hotlinking
Vấn đề: URL hình ảnh trả về 403 khi được tìm nạp bên ngoài trình duyệt.
Khắc phục: Trích xuất hình ảnh trong ngữ cảnh trình duyệt:
# Get image data from within the browser
b64 = driver.execute_script("""
var img = arguments[0];
var canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
canvas.getContext('2d').drawImage(img, 0, 0);
return canvas.toDataURL('image/png').split(',')[1];
""", img_element)
Giải pháp lỗi ứng dụng
Đã chọn sai hình ảnh
Nguyên nhân: Thứ tự hình ảnh không khớp giữa trích xuất và hiển thị.
Khắc phục: Duy trì thứ tự nhất quán:
# Ensure images are indexed in display order
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
# The order of find_elements matches DOM order = display order
for i, img in enumerate(captcha_imgs, 1):
payload[f"image_base64_{i}"] = extract_base64(img)
Chỉ số giải pháp không khớp
Lý do: CaptchaAI trả về chỉ số dựa trên 1, nhưng mã của bạn sử dụng chỉ số dựa trên 0.
Sửa chữa:
solution = result["request"] # e.g., "1,3,5"
indices = [int(i) for i in solution.split(",")]
# Convert to 0-based for array access
for idx in indices:
captcha_imgs[idx - 1].click() # 1-based → 0-based
Gửi biểu mẫu không thành công sau khi chọn đúng
Lý do: Thiếu trường biểu mẫu hoặc mã thông báo bổ sung.
Khắc phục: Kiểm tra các trường ẩn phải được gửi cùng với hình ảnh xác thực:
# Look for hidden captcha tokens
hidden_fields = driver.find_elements(By.CSS_SELECTOR, "input[type='hidden']")
for field in hidden_fields:
name = field.get_attribute("name")
value = field.get_attribute("value")
print(f"Hidden field: {name}={value}")
Lỗi hết thời gian chờ
Captcha hết hạn trước khi quá trình giải quyết hoàn tất
Vấn đề: BLS CAPTCHA có thời gian hiệu lực ngắn.
Sửa chữa:
- Trích xuất hình ảnh và gửi tới CaptchaAI ngay lập tức
- Không trích xuất hình ảnh rồi đợi trước khi gửi
- Nếu quá trình giải mất >60 giây thì hình ảnh xác thực có thể đã hết hạn — hãy làm mới và thử lại
Việc bỏ phiếu mất quá nhiều thời gian
Khắc phục: Đảm bảo bạn đang bỏ phiếu chính xác:
# Standard polling pattern
for _ in range(30): # 30 attempts × 5 seconds = 150 seconds max
time.sleep(5)
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") == "ERROR_CAPTCHA_UNSOLVABLE":
# Don't keep polling — start over
raise Exception("Unsolvable")
Danh sách kiểm tra gỡ lỗi
| Kiểm tra | hành động |
|---|---|
| Hướng dẫn trích xuất? | In và xác minh văn bản hướng dẫn |
| Hình ảnh hợp lệ? | Lưu base64 vào tập tin và mở để xác minh |
| Số lượng hình ảnh có đúng không? | So sánh số lượng hình ảnh được gửi và hiển thị |
| Thứ tự hình ảnh có đúng không? | Xác minh thứ tự DOM khớp với thứ tự hiển thị |
| Tiền tố Base64 bị tước bỏ? | Xóa data:image/...;base64, |
| Dạng giải pháp? | Phân tích các chỉ mục dựa trên 1 được phân tách bằng dấu phẩy |
| Chuyển đổi chỉ mục? | Trừ 1 để truy cập mảng dựa trên 0 |
Câu hỏi thường gặp
Tôi nên gửi bao nhiêu hình ảnh tới CaptchaAI?
Gửi tất cả hình ảnh hiển thị trong CAPTCHA, thường là 3–9. Sử dụng image_base64_1 thông qua image_base64_9.
Nếu hướng dẫn bằng ngôn ngữ không phải tiếng Anh thì sao?
Gửi hướng dẫn chính xác như được hiển thị. CaptchaAI xử lý các hướng dẫn đa ngôn ngữ.
Tôi có thể tải trước hình ảnh để tăng tốc độ giải quyết không?
Không. BLS tạo ra những hình ảnh duy nhất cho mỗi phiên. Bạn phải trích xuất chúng mới cho mỗi phiên bản hình ảnh xác thực.
Điều gì sẽ xảy ra nếu BLS thay đổi định dạng CAPTCHA của họ?
Nếu định dạng thay đổi, mã trích xuất hình ảnh có thể cần được cập nhật. Các thông số API CaptchaAI (method=bls, hướng dẫn, hình ảnh) sẽ giữ nguyên.
Hướng dẫn liên quan
- Cách giải BLS CAPTCHA từng bước
- BLS CAPTCHA hoạt động như thế nào
- Tham khảo mã lỗi CaptchaAI