Руководства
Как найти параметры reCAPTCHA
Эта страница переведена с китайской версии машинным переводом и может содержать ошибки. Приоритет имеет китайская версия.
Для создания задачи reCAPTCHA нужны websiteURL (адрес страницы, на которой появляется капча) и websiteKey (ключ сайта), а для v3 ещё и pageAction. Если вы отправляете токен через Selenium или похожий инструмент, понадобится и callback-функция. Всё это можно найти в инструментах разработчика браузера (F12).
Самый быстрый способ: скрипт автоматического поиска
Заголовок раздела «Самый быстрый способ: скрипт автоматического поиска»Откройте страницу с капчей, нажмите F12, перейдите в консоль (Console), вставьте и запустите:
// 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();В результате sitekey — это websiteKey, pageurl — это websiteURL, version показывает, v2 это или v3, а function и callback — 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" }]Пустой массив означает, что reCAPTCHA на странице ещё не загрузилась. Запустите скрипт снова, когда капча появится.
websiteKey и websiteURL
Заголовок раздела «websiteKey и websiteURL»На вкладке Network найдите по запросу anchor запрос вида:
https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normal- Значение после
k=— этоwebsiteKey. - В
websiteURLукажите полный адрес страницы, на которой появляется капча (обычно этоRefererданного запроса).
Также можно поискать data-sitekey в исходном коде страницы.
pageAction (v3)
Заголовок раздела «pageAction (v3)»pageAction — это значение action, которое страница передаёт в grecaptcha.execute(ключ_сайта, {action: '...'}). Оно должно совпадать со значением на странице.
Способ 1: поиск по исходному коду. На вкладке Sources нажмите правой кнопкой мыши и выберите «Search in all files». Для обычной v3 ищите .execute(, для v3 Enterprise — .enterprise.execute, и посмотрите на action после него:
grecaptcha.ready(function () { grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', { action: 'login' }).then(function (token) { // ... });});Здесь pageAction равен login.
Способ 2: точка останова. Если код обфусцирован и поиск ничего не находит, выполните в консоли debug(grecaptcha.execute) (для Enterprise — debug(grecaptcha.enterprise.execute)), затем выполните на странице действие, которое запускает проверку (например, нажмите «Войти»). Когда выполнение остановится, посмотрите значение action в панели Scope справа.
Сайт может использовать разные action на разных шагах (например, при регистрации сначала signup/submit_email, затем signup/success). Берите значение для того шага, который вам нужно пройти. Нажмите F8, чтобы продолжить выполнение и увидеть следующий action.
Callback-функция
Заголовок раздела «Callback-функция»Когда вы подставляете токен на страницу через Selenium или похожий инструмент, после этого нужно вызвать callback-функцию страницы, чтобы сообщить ей, что проверка пройдена:
- Найдите
data-callbackна вкладке Elements: его значение — имя callback-функции, напримерdata-callback="onSuccess". - Либо найдите
grecaptcha.renderи посмотрите параметрcallback. - Либо посмотрите
___grecaptcha_cfg.clientsв консоли или воспользуйтесь скриптом автоматического поиска выше.
Как вызвать:
driver.execute_script("onSuccess(arguments[0])", g_recaptcha_response)У некоторых страниц нет callback-функции: достаточно подставить токен в текстовое поле g-recaptcha-response и сразу отправить форму. Полный порядок действий см. в разделе Как пройти reCAPTCHA с помощью токена.