Việc giải quyết CAPTCHA hình ảnh lưới có thể không thành công do chất lượng hình ảnh, định dạng không khớp hoặc ứng dụng giải pháp không chính xác. Dưới đây là những lỗi phổ biến nhất và cách giải quyết chúng.
Lỗi gửi hình ảnh
ERROR_WRONG_FILE_EXTENSION
Lý do: Tệp tải lên không phải là định dạng hình ảnh hợp lệ.
Sửa chữa:
- Chỉ sử dụng định dạng PNG hoặc JPEG
- Xác minh chuỗi base64 được mã hóa chính xác
- Xóa tiền tố
data:image/...;base64,trước khi gửi
# WRONG — includes data URI prefix
body = "data:image/png;base64,iVBORw0KGgo..."
# CORRECT — raw base64 only
body = "iVBORw0KGgo..."
ERROR_TOO_BIG_CAPTCHA_FILESIZE
Lý do: Hình ảnh vượt quá kích thước tệp tối đa (thường là 600KB).
Sửa chữa:
from PIL import Image
import io
import base64
# Resize if too large
img = Image.open("captcha.png")
if img.width > 600:
ratio = 600 / img.width
img = img.resize((600, int(img.height * ratio)), Image.LANCZOS)
buffer = io.BytesIO()
img.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()
ERROR_ZERO_CAPTCHA_FILESIZE
Lý do: File trống hoặc trích xuất hình ảnh không thành công.
Sửa chữa:
- Xác minh phần tử hình ảnh đã được tải trước khi giải nén
- Kiểm tra xem thuộc tính
srccó trống không - Đợi hình ảnh được tải lười biếng
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Wait for image to load
WebDriverWait(driver, 10).until(
lambda d: d.find_element(By.CSS_SELECTOR, ".captcha img").get_attribute("complete") == "true"
)
Giải quyết lỗi
ERROR_CAPTCHA_UNSOLVABLE
Lý do: Hình ảnh quá mờ, méo hoặc không nhận dạng được vật thể.
Sửa chữa:
- Chụp ảnh ở độ phân giải đầy đủ - không thu nhỏ
- Đảm bảo không có lớp phủ hoặc hình mờ che khuất lưới
- Thử lại bằng hình ảnh xác thực mới (một số thử thách vốn đã mơ hồ)
Xác định sai ô
Nguyên nhân: Chất lượng hình ảnh thấp hoặc chụp một phần.
Sửa chữa:
- Chụp màn hình toàn bộ phần tử hình ảnh xác thực, bao gồm cả đường viền
- Không cắt quá chặt - bao gồm một vài pixel lề
- Xác minh bằng cách lưu ảnh đã chụp và xem lại thủ công
# Take a proper element screenshot
captcha_el = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_el.screenshot("debug_captcha.png")
# Open and check manually
from PIL import Image
Image.open("debug_captcha.png").show()
Giải pháp lỗi ứng dụng
Lỗi chỉ mục từng cái một
Nguyên nhân: Không khớp giữa phản hồi API dựa trên 1 và lập chỉ mục mảng dựa trên 0.
# API returns "1,3,5" (1-based)
solution = "1,3,5"
indices = [int(i) for i in solution.split(",")]
# DON'T: use directly as array index
# cells[1], cells[3], cells[5] ← WRONG (off by one)
# DO: convert to 0-based
for idx in indices:
cells[idx - 1].click() # 1→0, 3→2, 5→4
Các tế bào không phản hồi với các nhấp chuột
Lý do: Mục tiêu nhấp chuột sai — lớp phủ, iframe hoặc DOM bóng.
Sửa chữa:
# Check if captcha is in an iframe
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
if "captcha" in iframe.get_attribute("src").lower():
driver.switch_to.frame(iframe)
break
# Now find and click cells
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")
Lưới động - ô thay đổi sau khi nhấp vào
Lý do: Lưới động kiểu reCAPTCHA thay thế các ô xếp.
Khắc phục: Sử dụng phương thức mã thông báo thay vì phương thức hình ảnh cho reCAPTCHA:
# Token method handles dynamic grids automatically
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": "https://example.com",
"json": 1
})
Lỗi hết thời gian chờ
Captcha hết hạn trước khi giải pháp trả về
Lý do: CAPTCHA dạng lưới thường hết hạn sau 2–3 phút.
Sửa chữa:
- Gửi ảnh ngay sau khi chụp
- Nếu việc giải quyết mất hơn 60 giây, hãy làm mới và thử lại
CAPCHA_NOT_READY lặp vô thời hạn
Lý do: Tác vụ có thể đã thất bại trong âm thầm.
Khắc phục: Đặt số lần thử lại tối đa và xử lý lỗi:
for attempt in range(30):
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") not in ["CAPCHA_NOT_READY"]:
break # Actual error, stop polling
raise Exception("Grid captcha solve failed — refresh and retry")
Danh sách kiểm tra gỡ lỗi
| Kiểm tra | hành động |
|---|---|
| Định dạng hình ảnh? | PNG hoặc JPEG, được mã hóa chính xác |
| Kích thước hình ảnh? | Dưới 600KB |
| Đã chụp toàn bộ lưới? | Bao gồm toàn bộ lưới có lề |
| Chất lượng hình ảnh? | Rõ ràng, không bị mờ hoặc thu nhỏ |
| Dạng giải pháp? | Phân tích chính xác các chỉ mục được phân tách bằng dấu phẩy |
| Cơ sở chỉ số? | Chuyển đổi dựa trên 1 thành dựa trên 0 cho mảng |
| Bối cảnh khung nội tuyến? | Chuyển sang iframe captcha nếu có |
| Captcha đã hết hạn? | Gửi ngay sau khi chụp |
Câu hỏi thường gặp
Định dạng hình ảnh nào mang lại kết quả tốt nhất?
PNG tạo ra kết quả tốt nhất vì nó không mất dữ liệu. JPEG hoạt động nhưng nén nhiều có thể làm mờ ranh giới ô và giảm độ chính xác.
Tôi có nên đưa văn bản hướng dẫn kèm theo hình ảnh dạng lưới không?
Đối với method=post có recaptcha=1, không cần có hướng dẫn — bộ giải xác định các đối tượng một cách trực quan. Đối với method=bls, luôn bao gồm văn bản hướng dẫn.
Tôi có thể giải song song nhiều CAPTCHA dạng lưới không?
Vâng. Mỗi giải pháp là độc lập. Gửi nhiều nhiệm vụ và thăm dò từng nhiệm vụ riêng biệt.
Điều gì sẽ xảy ra nếu lưới có kích thước không chuẩn?
CaptchaAI phân tích hình ảnh nguyên trạng. Các lưới không chuẩn (ví dụ: 5×3, 2×4) được xử lý dựa trên phân tích trực quan thay vì các giả định lưới cố định.
Hướng dẫn liên quan
- Cách tự động giải Grid Image CAPTCHA
- Thử thách Grid Image CAPTCHA hoạt động như thế nào
- Tham khảo mã lỗi CaptchaAI