Khắc Phục Sự Cố

Các lỗi và cách sửa lỗi CAPTCHA hình ảnh lưới phổ biến

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 src có 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=postrecaptcha=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

Os comentários estão desativados para este artigo.