Làm cách nào để tìm hàm gọi lại cho từng phiên bản của reCaptcha
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
- Mở trang web hiển thị, nhấn F12 để vào console.
- 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}")')
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.
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)
.
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)