Phân Tích Kỹ Thuật

Bản địa hóa CAPTCHA: Cài đặt ngôn ngữ ảnh hưởng như thế nào đến các thách thức

Token mà CaptchaAI trả về cho một site reCAPTCHA không đổi dù bạn crawl bằng Accept-Language tiếng Anh, tiếng Nhật hay tiếng Việt — sitekey, luồng xác minh và định dạng token giữ nguyên bất kể CAPTCHA hiển thị ngôn ngữ nào. Phần thực sự phụ thuộc ngôn ngữ chỉ có CAPTCHA hình ảnh/OCR, nơi bộ ký tự trong ảnh đổi theo locale của trang. Nắm rõ ranh giới này giúp bạn không tốn thời gian đồng bộ ngôn ngữ ở chỗ không cần, và đặt đúng tham số ở chỗ thực sự cần.

Ảnh hưởng thực sự khi gọi API để giải

CAPTCHA dạng token (reCAPTCHA, Turnstile). Cài đặt ngôn ngữ chỉ đổi giao diện, không đổi token. Quy trình giải không phụ thuộc ngôn ngữ:

  • Gửi sitekey và pageurl
  • CaptchaAI trả về token hợp lệ
  • Token hoạt động bất kể tiện ích CAPTCHA hiển thị ngôn ngữ nào

Không cần truyền tham số ngôn ngữ khi gọi CaptchaAI cho CAPTCHA dạng token.

CAPTCHA hình ảnh/OCR — trường hợp duy nhất cần đặt tham số ngôn ngữ. Ở đây ngôn ngữ ảnh hưởng trực tiếp đến ký tự xuất hiện trong ảnh:

Ngôn ngữ trang Nội dung CAPTCHA Tham số language của CaptchaAI
Tiếng Anh "Enter the text: XKCD42" 0 (mặc định/Latin)
Tiếng Nga "Введите текст: ШКАФ" 1 (Cyrillic) hoặc 2
Tiếng Trung "请输入验证码: 汉字" 2 (non-Latin)
Tiếng Ả Rập "أدخل النص: عربي" 2 (non-Latin)
Tiếng Nhật "文字を入力: ひらがな" 2 (non-Latin)

CAPTCHA âm thanh. Thử thách âm thanh của reCAPTCHA được đọc bằng ngôn ngữ khớp tham số hl hoặc header Accept-Language. CaptchaAI xử lý loại này qua quy trình giải reCAPTCHA tiêu chuẩn — cách giải không phụ thuộc ngôn ngữ âm thanh.

Ví dụ thực tế: team QA ở TP.HCM test site outsource của Nhật

Nhiều công ty outsourcing tại TP.HCM và Hà Nội vận hành bộ test tự động cho khách hàng nước ngoài. Kịch bản thường gặp: script Playwright chạy với browser context mặc định (locale en-US) để test luồng đăng nhập của một site thương mại điện tử Nhật Bản. reCAPTCHA trên site hiển thị tiếng Anh thay vì tiếng Nhật vì navigator.language không khớp ngôn ngữ gốc của site — nhưng vì token CaptchaAI không phụ thuộc ngôn ngữ giao diện, bước giải CAPTCHA vẫn chạy đúng như bình thường.

Nếu có vấn đề, nó nằm ở các bước khác trong luồng test (ví dụ hiển thị sai định dạng ngày, tiền tệ), không phải ở việc giải CAPTCHA.

Vì sao token không đổi dù giao diện CAPTCHA đổi theo ngôn ngữ

Mỗi nhà cung cấp tách riêng phần hiển thị và phần dữ liệu xác minh gửi đi:

Nhà cung cấp CAPTCHA Bản địa hóa phần nào Giữ nguyên
reCAPTCHA Văn bản giao diện, nhãn ảnh, giọng đọc audio Sitekey, luồng xác minh, định dạng token
Cloudflare Turnstile Văn bản widget, thông báo lỗi Sitekey, định dạng token, cơ chế giải
hCaptcha Hướng dẫn thử thách, nhãn danh mục Sitekey, định dạng token
CAPTCHA hình ảnh/OCR Bộ ký tự, ngôn ngữ văn bản trong ảnh Định dạng ảnh, luồng gửi task/polling

CaptchaAI hỗ trợ giải reCAPTCHA v2/v3 và Cloudflare Turnstile ở bất kỳ ngôn ngữ giao diện nào. hCaptcha có trong bảng trên chỉ để so sánh cách bản địa hóa hoạt động giữa các nhà cung cấp — CaptchaAI hiện chưa hỗ trợ giải hCaptcha.

Phần tiếp theo là bốn tín hiệu khiến CAPTCHA "biết" nên hiển thị ngôn ngữ nào.

Trình duyệt và trang đích "khai báo" ngôn ngữ cho CAPTCHA bằng cách nào

Nhà cung cấp CAPTCHA không hỏi bạn muốn ngôn ngữ gì — họ suy ra từ bốn tín hiệu độc lập sau đây.

Header Accept-Language

Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7

Header này báo cho máy chủ thứ tự ưu tiên ngôn ngữ: ở ví dụ trên là tiếng Nhật (Nhật Bản) trước, tiếng Anh (Mỹ) sau, rồi tiếng Anh chung. reCAPTCHA và Turnstile dùng tín hiệu này để chọn ngôn ngữ giao diện.

Tham số hl trên script reCAPTCHA

reCAPTCHA chấp nhận tham số ngôn ngữ rõ ràng ngay khi tải:

<!-- Force English reCAPTCHA -->
<script src="https://www.google.com/recaptcha/api.js?hl=en"></script>

<!-- Force Japanese -->
<script src="https://www.google.com/recaptcha/api.js?hl=ja"></script>

Tham số hl ghi đè header Accept-Language. Khi giải bằng CaptchaAI, bạn không cần khớp giá trị này — token trả về không phụ thuộc ngôn ngữ giao diện.

Vị trí IP (Geo-IP)

Một số cấu hình CAPTCHA còn thay đổi theo vùng, không chỉ theo ngôn ngữ khai báo:

  • IP từ Trung Quốc — trang có thể tải GeeTest thay vì reCAPTCHA (reCAPTCHA bị chặn tại Trung Quốc)
  • IP từ EU — có thể hiện bước đồng ý GDPR trước CAPTCHA
  • IP từ khu vực bị hạn chế — có thể gặp thử thách khó hơn

CAPTCHA chạy bằng JavaScript đọc ngôn ngữ khai báo của trình duyệt:

navigator.language       // "en-US"
navigator.languages      // ["en-US", "en", "ja"]

Trình duyệt headless mặc định dùng ngôn ngữ hệ thống cho hai giá trị này. Đặt rõ locale khi khởi tạo context để khớp mục tiêu kiểm thử:

// Playwright
const context = await browser.newContext({
  locale: 'ja-JP',
});

// Puppeteer
const page = await browser.newPage();
await page.setExtraHTTPHeaders({
  'Accept-Language': 'ja-JP,ja;q=0.9',
});

Lỗi bản địa hóa hay gặp khi tự động hóa

Ngôn ngữ scraper không khớp ngôn ngữ trang đích. Nếu công cụ tự động hóa của bạn gửi Accept-Language: en-US đến một trang tiếng Nhật, CAPTCHA có thể hiển thị bằng tiếng Anh. Với CAPTCHA dạng token, điều này không ảnh hưởng gì — token không phụ thuộc ngôn ngữ giao diện. Nhưng nếu trang đích đối chiếu ngôn ngữ giữa nhiều tín hiệu (header, navigator.language, cookie locale) để tính điểm rủi ro tổng thể, sự không khớp có thể ảnh hưởng đến các bước khác trong luồng test — không riêng bước CAPTCHA.

Mỗi khu vực mặc định dùng nhà cung cấp CAPTCHA khác nhau, nên script viết cho một thị trường có thể gặp một loại CAPTCHA hoàn toàn khác khi chạy ở thị trường khác:

  • Thị trường phương Tây — reCAPTCHA, Cloudflare Turnstile, hCaptcha
  • Trung Quốc — GeeTest, Tencent CAPTCHA, CAPTCHA ảnh tùy chỉnh
  • Nga/CIS — CAPTCHA ảnh tùy chỉnh, reCAPTCHA
  • Hàn Quốc — thanh trượt tùy chỉnh, CAPTCHA ảnh

Xử lý sự cố nhanh

Vấn đề Nguyên nhân Cách xử lý
reCAPTCHA hiển thị khác ngôn ngữ mong đợi Tham số hl trong script tag và header Accept-Language không khớp Không ảnh hưởng đến việc giải — token không phụ thuộc ngôn ngữ
CAPTCHA ảnh nhận sai ký tự Tham số language không khớp bộ ký tự trong ảnh Đặt language=2 cho CAPTCHA non-Latin
Trang phục vụ loại CAPTCHA khác nhau theo vùng Chọn nhà cung cấp dựa trên Geo-IP Test qua proxy đặt tại đúng khu vực để tái hiện luồng CAPTCHA của khu vực đó
Trình duyệt headless hiển thị sai locale Dùng ngôn ngữ hệ thống mặc định Đặt locale rõ ràng khi khởi tạo browser context
CAPTCHA âm thanh phát sai ngôn ngữ Header bị tham số hl ghi đè Không ảnh hưởng đến việc giải token của CaptchaAI

Câu hỏi thường gặp

Vì sao cùng một sitekey lại hiện CAPTCHA khác ngôn ngữ cho từng khách truy cập?

Vì nhà cung cấp CAPTCHA đọc ngôn ngữ hiển thị từ nhiều tín hiệu độc lập với sitekey: header Accept-Language, tham số hl trên script reCAPTCHA, navigator.language của trình duyệt, và đôi khi cả IP theo vùng. Sitekey và cơ chế xác minh giữ nguyên — chỉ phần giao diện thay đổi theo khách truy cập.

CaptchaAI có cần biết CAPTCHA đang hiển thị ngôn ngữ nào không?

Với reCAPTCHA và Cloudflare Turnstile — không, vì token trả về không phụ thuộc ngôn ngữ giao diện. Với CAPTCHA hình ảnh/OCR — có, bạn cần đặt tham số language khớp bộ ký tự hiển thị trong ảnh. CaptchaAI hiện chưa hỗ trợ hCaptcha nên câu hỏi này không áp dụng cho loại đó.

Đặt tham số language nào khi CAPTCHA ảnh có ký tự tiếng Việt có dấu?

Tiếng Việt vẫn dùng bảng chữ Latin (có dấu) nên phần lớn trường hợp bạn dùng language=0 như CAPTCHA tiếng Anh. Chỉ chuyển sang language=2 (non-Latin) khi ảnh CAPTCHA dùng bộ ký tự hoàn toàn khác Latin — Cyrillic, chữ Hán, tiếng Ả Rập.

Vì sao IP từ Trung Quốc lại khiến trang chuyển từ reCAPTCHA sang GeeTest?

Vì reCAPTCHA bị chặn tại Trung Quốc, trang phát hiện IP từ đó thường tự phục vụ GeeTest hoặc CAPTCHA ảnh tùy chỉnh — quyết định dựa trên Geo-IP, không liên quan Accept-Language hay navigator.language. CaptchaAI giải được GeeTest v3; v4 hiện chỉ sắp ra mắt.

Header Accept-Language không khớp trang đích có gây rủi ro gì không?

Với việc giải CAPTCHA thì không — token vẫn hợp lệ dù Accept-Language không khớp giao diện. Nhưng nếu trang đích đối chiếu ngôn ngữ header với các tín hiệu khác để tính điểm rủi ro tổng thể của phiên, sự không khớp có thể ảnh hưởng đến các bước ngoài CAPTCHA trong luồng test. Đặt Accept-Language khớp ngôn ngữ chính của trang đích là thực hành tốt khi kiểm thử.

Bước tiếp theo

Cấu hình đúng ngôn ngữ ở chỗ thực sự cần — lấy API key CaptchaAI và bắt đầu giải CAPTCHA bất kể giao diện hiển thị tiếng gì.

Hướng dẫn liên quan:

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