Bỏ qua để đến nội dung
Trạng tháiBảng điều khiển

Hướng dẫn

Tìm tham số reCAPTCHA

Trang này được dịch máy từ bản tiếng Trung và có thể có sai sót. Nội dung theo bản tiếng Trung.

Để tạo tác vụ reCAPTCHA, bạn cần websiteURL (địa chỉ trang hiển thị captcha) và websiteKey (khóa của website); v3 cần thêm pageAction. Khi mô phỏng thao tác gửi bằng Selenium hoặc công cụ tương tự, bạn còn cần biết hàm callback. Tất cả đều có thể tìm thấy trong công cụ dành cho nhà phát triển của trình duyệt (F12).

Mở trang có captcha, nhấn F12 để mở Console, dán và chạy:

find-recaptcha-clients.js
// Paste into the browser DevTools console on a page with reCAPTCHA, then run findRecaptchaClients().
// Lists every reCAPTCHA on the page: version (V2/V3), sitekey, page URL and the callback function.
function findRecaptchaClients() {
if (typeof ___grecaptcha_cfg === 'undefined') return [];
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([, value]) => value && typeof value === 'object');
objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(
([, value]) => value && typeof value === 'object' && 'sitekey' in value && 'size' in value,
);
if (toplevel instanceof HTMLElement && toplevel.tagName === 'DIV') data.pageurl = toplevel.baseURI;
if (found) {
const [sublevelKey, sublevel] = found;
data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
findRecaptchaClients();

Trong kết quả trả về, sitekey là websiteKey, pageurl là websiteURL, version cho biết là v2 hay v3, còn function và callback là hàm callback:

[
{
"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"
}
]

Mảng rỗng nghĩa là trang chưa tải reCAPTCHA; hãy chạy lại sau khi captcha xuất hiện.

Trong tab Network, tìm anchor và chọn request có dạng như sau:

https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normal
  • Giá trị sau k= chính là websiteKey.
  • websiteURL là địa chỉ đầy đủ của trang hiển thị captcha (thường chính là Referer của request này).

Bạn cũng có thể tìm data-sitekey trong mã nguồn trang.

pageAction là action mà trang truyền khi gọi grecaptcha.execute(khóa website, {action: '...'}), và phải khớp với trang.

Cách 1: tìm trong mã nguồn. Trong tab Sources của công cụ dành cho nhà phát triển, nhấp chuột phải và chọn “Search in all files”. Với v3 thường, tìm .execute(; với v3 Enterprise, tìm .enterprise.execute, rồi xem action phía sau:

grecaptcha.ready(function () {
grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', { action: 'login' }).then(function (token) {
// ...
});
});

Ở đây pageAction là login.

Cách 2: đặt breakpoint. Khi mã bị làm rối (obfuscate) và không tìm thấy, hãy chạy debug(grecaptcha.execute) trong Console (bản Enterprise dùng debug(grecaptcha.enterprise.execute)), rồi thực hiện thao tác trên trang có kích hoạt xác minh (ví dụ nhấp đăng nhập). Khi trình gỡ lỗi dừng lại, xem giá trị của action trong Scope ở bên phải.

Một website có thể dùng các action khác nhau ở những bước khác nhau (ví dụ khi đăng ký, trước là signup/submit_email rồi đến signup/success); hãy lấy giá trị của bước bạn cần vượt qua. Nhấn F8 để tiếp tục chạy, bạn sẽ thấy action tiếp theo.

Khi điền token vào trình duyệt bằng Selenium hoặc công cụ tương tự, sau khi điền xong bạn cần gọi hàm callback của trang để báo cho trang biết đã xác minh xong:

  • Tìm data-callback trong tab Elements; giá trị của nó là tên hàm callback, ví dụ data-callback="onSuccess".
  • Hoặc tìm grecaptcha.render và xem callback trong các tham số.
  • Hoặc xem ___grecaptcha_cfg.clients trong Console, hoặc dùng script tự động tìm ở trên.

Cách gọi:

driver.execute_script("onSuccess(arguments[0])", g_recaptcha_response)

Một số trang không có hàm callback; chỉ cần điền token vào ô văn bản g-recaptcha-response rồi gửi biểu mẫu. Xem quy trình đầy đủ tại Dùng token để hoàn thành reCAPTCHA.