Scarnox · Blog

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

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:

  1. is_invisible đã đặt là true chưa?
  2. Trang có gọi callback không, và có làm vậy trước khi form được gửi không?
  3. site_url có phải là trang nơi widget vô hình chạy không?
  4. 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:

  1. 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í.
  2. 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.
  3. Gửi form từ script của bạn, và kiểm tra trang kế tiếp.
  4. 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:

  1. Người truy cập, hoặc script của bạn, điền form.
  2. Script đọc sitekey và URL trang từ trang.
  3. Script gọi endpoint giải với is_invisible là true và chờ token.
  4. Script ghi token vào trường phản hồi và gọi callback của trang.
  5. 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:

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

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.