Blog
Cách tìm hàm gọi lại của mỗi phiên bản reCaptcha

Làm cách nào để tìm hàm gọi lại cho từng phiên bản của reCaptcha

Mỗi trang web là khác nhau, nếu không có phương pháp nào sau đây giải quyết vấn đề.

Vui lòng tự nghiên cứu thêm.

Sau khi có giá trị gRecaptchaResponse được nhận biết thành công thông qua API, nếu bạn đang sử dụng phần mềm mô phỏng, chẳng hạn như Selenium, bạn cần thực thi một hàm gọi lại để thông báo cho trang web rằng chúng tôi đã nhận biết thành công, vậy hãy tìm hiểu cách tìm hàm này:

Lưu ý: Trong một số trường hợp, thực sự không có hàm gọi lại. Trong trường hợp này, bạn có thể gán trực tiếp giá trị vào bộ chứa g-recaptcha-response và gửi biểu mẫu.

Phương pháp 1: Tìm kiếm qua phần tử Console

  1. Mở trang web hiển thị, nhấn F12 để vào console.
  2. Nhấn Ctrl+F trong phần Elements để tìm kiếm và nhập từ khóa: data-callback.

Như bạn có thể thấy, hàm gọi lại ở đây là onSuccess, sau đó, bạn chỉ cần thực hiện hàm này trong Selenium.

Nếu bạn không thể tìm thấy nó, có thể do sự nhầm lẫn hoặc tình huống khác, bạn có thể thử các phương pháp khác.

driver.execute_script(f'onSuccess("{gRecaptchaResponse}")')

img.png

Phương pháp 2: Áp dụng cho loạt reCaptcha V3

Tương tự như phương pháp 1, tìm từ khóa: grecaptcha.render.

Tìm mã tương tự, nơi hàm gọi lại được gọi.

grecaptcha.render('example', {
  'sitekey': 'someSitekey',
  'callback': myCallbackFunction,
  'theme': 'dark'
});

Phương pháp 3: Tìm kiếm qua Console

Nhấn F12 để vào console, nhập ___grecaptcha_cfg.clients, nếu có lỗi xuất hiện, trang web chưa tải reCaptcha.

Thường có nhiều nút, bạn cần chú ý đến sự khác biệt, ở đây onSuccess là hàm gọi lại mà chúng ta đang tìm kiếm.

img.png

Phương pháp 4: Tìm kiếm bằng chức năng tìm kiếm tự động

Nếu khó khăn khi thực hiện các phương pháp trên, bạn có thể thử tìm bằng cách định nghĩa một chức năng tìm kiếm tự động.

Nhấn F12 để vào console và nhập chức năng tự định nghĩa sau đây findRecaptchaClients().

function findRecaptchaClients() {
  if (typeof (___grecaptcha_cfg) !== 'undefined') {
    return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
      // Các bước xử lý để tìm hàm gọi lại ở đây
      return data;
    });
  }
  return [];
}
 
findRecaptchaClients && findRecaptchaClients()

Sau đó, thực hiện chức năng này findRecaptchaClients() trong console để tìm hàm tương ứng.

[
  {
    "id": "0",
    "version": "V2",
    "sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "function": "onSuccess",
    "callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
    "pageurl": "https://www.google.com/recaptcha/api2/demo"
  }
]

Làm thế nào để gọi hàm reCaptcha ẩn danh?

Lưu ý: Đôi khi hàm gọi lại tìm thấy là tên hàm, chẳng hạn như onSuccess đã đề cập ở trên, bạn chỉ cần gọi trực tiếp onSuccess(gRecaptchaResponse) khi gọi, nhưng đôi khi nó được tìm thấy là một hàm ẩn danh, có nghĩa là không có tên hàm, chẳng hạn như sau:

Đối với loại hàm ẩn danh này, bạn chỉ cần thực hiện

nó theo đường dẫn hoàn chỉnh mà chúng tôi vừa tìm thấy, và hiệu quả là giống nhau, ví dụ:

___grecaptcha_cfg.clients.xxxxxxxxx.xxxxx.xxxxx.callback(gRecaptchaResponse)

Hãy xem xét một ví dụ, lấy trang web này làm ví dụ, nhập ___grecaptcha_cfg.clients để mở rộng tìm kiếm, bạn có thể thấy hàm gọi lại ở đây là promise-callback và là một hàm ẩn danh f(token).

img.png

Bạn có thể nhấp chuột phải vào nó và chọn Copy property path để sao chép đường dẫn nút này.

[100000].l.l["promise-callback"]("gRecaptchaResponse")

Thêm vào ___grecaptcha_cfg.clients bạn vừa nhập và bạn có thể có đường dẫn đầy đủ của hàm này.

___grecaptcha_cfg.clients[100000].l.l["promise-callback"]

Cuối cùng, nó tương tự như phương pháp thực hiện được đề cập ở trên, chỉ cần thực hiện nó như một hàm thông thường.

___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)