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).
Cách nhanh nhất: script tự động tìm
Phần tiêu đề “Cách nhanh nhất: script tự động tìm”Mở trang có captcha, nhấn F12 để mở Console, dán và chạy:
// 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.
websiteKey và websiteURL
Phần tiêu đề “websiteKey và websiteURL”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. websiteURLlà địa chỉ đầy đủ của trang hiển thị captcha (thường chính làReferercủa request này).
Bạn cũng có thể tìm data-sitekey trong mã nguồn trang.
pageAction (v3)
Phần tiêu đề “pageAction (v3)”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.
Hàm callback
Phần tiêu đề “Hàm callback”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-callbacktrong tab Elements; giá trị của nó là tên hàm callback, ví dụdata-callback="onSuccess". - Hoặc tìm
grecaptcha.rendervà xemcallbacktrong các tham số. - Hoặc xem
___grecaptcha_cfg.clientstrong 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.