Giải PopularCaptcha vô hình: khác biệt và cần gửi gì
PopularCaptcha vô hình trông như không có captcha nào. Không có ô "I am human". Trang gọi PopularCaptcha từ JavaScript của chính nó, thường khi người truy cập nhấn gửi, và chỉ hiển thị thử thách nếu không chắc về người truy cập. Với một script tự động, widget khó nhận ra hơn, nhưng việc giải vẫn chỉ là một request.
Scarnox giải PopularCaptcha hiện nay, bao gồm cả biến thể vô hình. Bạn đặt một cờ, is_invisible, và gửi cùng request như với widget hiển thị. Các loại captcha khác sắp ra mắt.
Cách nhận biết captcha vô hình
- Widget có
data-size="invisible". - Trang gọi hàm
execute()của widget trong mã của chính nó. - Có sitekey trong trang nhưng không có ô đánh dấu nào hiển thị.
Cấu hình trên sitekey quyết định điều này, không phải giao diện của trang. Nếu không chắc, hãy tìm sitekey và kiểm tra các tùy chọn widget trong JavaScript của trang.
Cần gửi gì
Dùng cùng endpoint và cùng loại task, và thêm is_invisible với giá trị true:
{
"captcha_type": "PopularCaptchaTaskProxyless",
"site_key": "10000000-ffff-ffff-ffff-000000000001",
"site_url": "https://example.com/login",
"is_invisible": true
}
Gửi kèm khóa của bạn trong header Authorization: Bearer, như trong mọi ví dụ khác. Lệnh gọi sẽ chờ cho đến khi token sẵn sàng, không cần polling. Dùng timeout khoảng 185 giây.
Trả token lại
Các tích hợp vô hình hầu như luôn dùng callback thay vì trường form. Trang truyền tên một hàm cho widget, hoặc trong thuộc tính data-callback, hoặc trong các tùy chọn truyền vào render(). Gọi hàm đó với token, và mã của trang tiếp tục như thể người truy cập đã vượt qua thử thách:
await page.evaluate((t) => {
document.querySelectorAll('[name="h-captcha-response"]').forEach((el) => { el.value = t; });
const cb = document.querySelector("[data-sitekey]")?.dataset.callback;
if (cb && typeof window[cb] === "function") window[cb](t);
}, token);
Đặt cả trường ẩn cũng không sao, và nó bao phủ các trang đọc trường đó khi gửi form.
Thời điểm quan trọng hơn bình thường
Với widget vô hình, trang quyết định khi nào thử thách chạy, và thường là đúng lúc người truy cập gửi form. Vì vậy hãy giải đúng thời điểm đó, đừng sớm hơn. Cách đơn giản nhất là kích hoạt lệnh giải ngay trước khi script của bạn nhấn nút, rồi gọi callback và gửi.
Token hết hạn trong khoảng hai phút. Một token lấy lúc tải trang và dùng sau một phút có khả năng bị từ chối.
Lỗi thường gặp
Gửi một sitekey vô hình như một task hiển thị thông thường có thể tạo ra token mà trang từ chối. Nếu API trả về token nhưng trang từ chối nó, hãy kiểm tra theo thứ tự sau:
is_invisibleđã đặt làtruechưa?- Trang có gọi callback không, và có làm vậy trước khi form được gửi không?
site_urlcó phải là trang nơi widget vô hình chạy không?- Nếu trang vẫn từ chối token, vấn đề có thể gắn với IP đã giải. Hãy so sánh với giải có proxy và không proxy.
Kiểm thử luồng vô hình một cách an toàn
Widget vô hình khó kiểm thử bằng tay, vì thử thách chỉ chạy khi gửi và phần lớn thời gian nó qua mà không hiển thị gì. Hãy kiểm thử theo thứ tự này:
- Xác nhận lệnh giải trả về token với
is_invisibleđặt làtrue, dùng smoke test trong hướng dẫn dùng thử miễn phí. - Tự gọi callback của trang trong console trình duyệt với token đó, và xem form có tiếp tục không.
- Gửi form từ script của bạn, và kiểm tra trang kế tiếp.
- Lặp lại từ một mạng khác nếu có thể, để xác nhận token không gắn với IP đã giải.
Chỉ kiểm thử trên một form bạn sở hữu, hoặc một bản staging của trang mà bạn được phép thử. Đừng bao giờ chạy luồng vô hình trên một tài khoản thật mà bạn không kiểm soát.
Thứ tự sự kiện trong một lần gửi vô hình
Một tích hợp hoạt động đi theo trình tự này:
- Người truy cập, hoặc script của bạn, điền form.
- Script đọc sitekey và URL trang từ trang.
- Script gọi endpoint giải với
is_invisiblelàtruevà chờ token. - Script ghi token vào trường phản hồi và gọi callback của trang.
- Mã của trang gửi form với token đính kèm.
Nếu bước 3 xảy ra sớm hơn bước 5 nhiều, token có thể hết hạn trước khi form được gửi. Giữ khoảng cách càng ngắn càng tốt.
Khi trang từ chối token vô hình
Bị từ chối không phải lúc nào cũng do token. Hãy kiểm tra những điều sau trước khi thay đổi request giải:
- Callback chạy trước khi form được gửi, không phải sau.
- Form đọc token từ trường mà script của bạn đã ghi. Một số trang dùng trường khác cho widget vô hình.
- Request mang token đến từ cùng phiên đã tải trang. Cookie từ phiên khác sẽ không khớp.
- Trang không tải lại giữa lúc giải và lúc gửi, vì việc đó sẽ hủy token.
Chỉ sau khi kiểm tra các điều này, bạn mới nên xem xét câu hỏi về proxy. Phần lớn các lần bị từ chối đến từ callback hoặc phiên, không phải từ IP.
Bước tiếp theo
- Cách giải PopularCaptcha bằng Python
- Giải PopularCaptcha trong Playwright và Puppeteer
- Retry và xử lý lỗi cho môi trường production
- Dùng thử giải captcha miễn phí
Bắt đầu với tín dụng dùng thử miễn phí, không cần thẻ: tạo tài khoản và thử một sitekey vô hình trên một trang bạn sở hữu.