Việc xử lý Image/text CAPTCHA có thể không thành công do chất lượng hình ảnh, vấn đề về định dạng hoặc thông số gợi ý không chính xác. Dưới đây là cách chẩn đoán và khắc phục các lỗi phổ biến nhất.
Lỗi gửi bài
ERROR_WRONG_FILE_EXTENSION
Lý do: Hình ảnh không ở định dạng được hỗ trợ hoặc base64 không hợp lệ.
Sửa chữa:
import base64
# Ensure proper encoding
with open("captcha.png", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
# Don't include the data URI prefix
# WRONG: "data:image/png;base64,iVBOR..."
# RIGHT: "iVBOR..."
ERROR_ZERO_CAPTCHA_FILESIZE
Lý do: File ảnh trống hoặc tải xuống không thành công.
Sửa chữa:
import os
# Check file size before submitting
if os.path.getsize("captcha.png") == 0:
print("Image file is empty — re-download")
# Re-capture the captcha
ERROR_TOO_BIG_CAPTCHA_FILESIZE
Lý do: Hình ảnh vượt quá kích thước tối đa (thường là 600KB).
Sửa chữa:
from PIL import Image
import io
img = Image.open("captcha.png")
# Reduce quality without losing text clarity
buffer = io.BytesIO()
img.save(buffer, format="PNG", optimize=True)
Văn bản sai được trả về
Các ký tự liên tục bị đọc sai
Lý do: Bộ giải nhầm lẫn các ký tự giống nhau (0/O, 1/l/I, 5/S).
Khắc phục: Sử dụng tham số gợi ý để hạn chế bộ ký tự:
# If captcha is digits only
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"numeric": 1, # 1 = digits only
"json": 1
})
# If captcha is letters only
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"numeric": 2, # 2 = letters only
"json": 1
})
Viết sai (chữ hoa và chữ thường)
Lý do: Bộ giải mặc định là chữ thường.
Khắc phục: Đặt regsense=1 để bật phân biệt chữ hoa chữ thường:
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"regsense": 1, # Case-sensitive
"json": 1
})
Ký tự thừa hoặc thiếu
Nguyên nhân: Nhiễu được hiểu là ký tự hoặc ký tự được hợp nhất.
Khắc phục: Đặt giới hạn độ dài min/max:
# If you know the CAPTCHA is always 6 characters
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"min_len": 6,
"max_len": 6,
"json": 1
})
Biểu thức toán học không được tính toán
Lý do: Người giải sẽ đọc văn bản "3+7" thay vì tính ra câu trả lời là "10".
Khắc phục: Đặt calc=1:
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"calc": 1, # Compute the math expression
"json": 1
})
Vấn đề về chất lượng hình ảnh
CAPTCHA quá nhỏ
Vấn đề: Hình ảnh rất nhỏ (chiều cao dưới 50px) làm mất chi tiết ký tự.
Khắc phục: Chụp ở kích thước lớn nhất hiện có. Nếu trang hiển thị hình ảnh xác thực nhỏ, hãy kiểm tra URL nguồn có độ phân giải cao hơn:
# Check for higher-res version
img_src = captcha_el.get_attribute("src")
# Some sites use ?size=small — try removing or changing the parameter
high_res_src = img_src.replace("size=small", "size=large")
CAPTCHA là hình động
Vấn đề: Một số CAPTCHA sử dụng ảnh GIF động trong đó văn bản chỉ hiển thị trong một số khung nhất định.
Khắc phục: Trích xuất đúng khung:
from PIL import Image
gif = Image.open("captcha.gif")
# Extract each frame and find the one with text
for i in range(gif.n_frames):
gif.seek(i)
gif.save(f"frame_{i}.png")
CAPTCHA có nền trong suốt
Vấn đề: PNG có nền trong suốt có thể không hiển thị chính xác cho OCR.
Khắc phục: Thêm nền trắng:
from PIL import Image
img = Image.open("captcha.png").convert("RGBA")
background = Image.new("RGBA", img.size, (255, 255, 255, 255))
background.paste(img, mask=img)
background.convert("RGB").save("captcha_white_bg.png")
Báo cáo giải pháp sai
Nếu CaptchaAI trả về văn bản sai, hãy báo cáo:
# Report bad answer
requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "reportbad",
"id": task_id
})
Điều này cải thiện độ chính xác của bộ giải và có thể hoàn lại chi phí giải.
Danh sách kiểm tra cải thiện độ chính xác
| tham số | Khi nào nên sử dụng | Hiệu ứng |
|---|---|---|
numeric=1 |
Chỉ chữ số | Loại bỏ sự nhầm lẫn giữa chữ/digit |
numeric=2 |
Chỉ chữ cái | Loại bỏ sự nhầm lẫn giữa chữ/digit |
min_len / max_len |
chiều dài đã biết | Ngăn chặn các ký tự extra/missing |
regsense=1 |
Vụ án quan trọng | Giữ nguyên chữ hoa/lowercase |
calc=1 |
biểu thức toán học | Trả về câu trả lời được tính toán |
phrase=1 |
Chứa khoảng trắng | Cho phép trả lời nhiều từ |
language=1 |
văn bản Cyrillic | Sử dụng bộ ký tự chính xác |
language=2 |
văn bản Latinh | Sử dụng bộ ký tự chính xác |
Câu hỏi thường gặp
Tại sao CAPTCHA của tôi luôn sai một ký tự?
Sử dụng min_len và max_len để hạn chế độ dài câu trả lời. Đồng thời xác minh chất lượng hình ảnh - hình ảnh mờ có thể gây hiểu nhầm.
Tôi nên sử dụng tập tin tải lên hoặc base64?
Cả hai đều hoạt động tốt như nhau. Base64 thuận tiện cho việc sử dụng theo chương trình; tải lên tệp hoạt động tốt hơn với các công cụ biểu mẫu nhiều phần.
Làm cách nào để giải CAPTCHA bằng các ngôn ngữ khác?
Đặt tham số language: 1 cho chữ Cyrillic, 2 cho tiếng Latin. Đối với các tập lệnh khác, hãy bỏ qua tham số và để bộ giải tự động phát hiện.
Tôi có thể giải CAPTCHA âm thanh bằng phương pháp này không?
Không. CAPTCHA âm thanh yêu cầu một cách giải quyết khác. Kiểm tra tài liệu CaptchaAI để biết hỗ trợ CAPTCHA âm thanh.