@951mighty
URL скинь в лс
помогите вызвать CallbackFunction после ришения капчи
-
@GamiD said in помогите вызвать CallbackFunction после ришения капчи:
document.getElementById("g-recaptcha-response").innerHTML = [[RESPONSE]]
https://zennolab.com/discussion/threads/ischu-reshenie-recaptcha-dlja-paypal.83923/
вот сдесь обсуждалось. Кто силен в програмировании можете помоч?
verifyCallback(); - просто Яваскрипт не срабативет -
This post is deleted!
-
Вот скрипт который находит callback
https://gist.github.com/2captcha/2ee70fa1130e756e1693a5d4be4d8c70в консоле переключаешься на

ввод
const findRecap = () => { if (typeof (___grecaptcha_cfg) !== 'undefined') { let cs = [] for (let id in ___grecaptcha_cfg.clients) { cs.push(id) } let res = cs.map(cid => { for (let p in ___grecaptcha_cfg.clients[cid]) { let c = {} cid >= 10000 ? c.version = 'V3' : c.version = 'V2' let path = "___grecaptcha_cfg.clients[" + cid + "]." + p let pp = eval(path) if (typeof pp === 'object') { for (let s in pp) { let subpath = "___grecaptcha_cfg.clients[" + cid + "]." + p + "." + s let sp = eval(subpath) if (sp && typeof sp === 'object' && sp.hasOwnProperty('sitekey') && sp.hasOwnProperty('size')) { c.sitekey = eval(subpath + '.sitekey') if (c.version === 'V2') { let cb = eval(subpath + '.callback') if (cb == null) { c.callback = null c.function = null } else { c.callback = subpath + '.callback' cb != c.callback ? c.function = cb : c.function = null } } else { let cb = eval(subpath+'["promise-callback"]') if (cb == null) { c.callback = null c.function = null } else { c.callback = subpath + '["promise-callback"]' cb != c.callback ? c.function = cb : c.function = null } } } } } return c } }) return (res) } else { return (null) } }После вводишь
console.log(findRecap()) или console.log(findRecap()[0].callback)И получаешь callback

-
@GamiD
сделал как у вас на инструкции: видало в консоль так же как у вас:
___grecaptcha_cfg.clients[0].L.L.callback
Тоесть ето и есть названия колбек функции?
Дальше запустил етот код в действия Яваскрипт:
___grecaptcha_cfg.clients[0].L.L.callback();
Но нечего не произошло. У вас как? -
This post is deleted!
-
@GamiD супер, спасибо, все облазил, только это помогло! Сайт один сменил обычную Recaptcha 2 на Enterprise версию. Соответственно стандартный модуль решения рекапчи не пашет, точнее в моем случае он ее решает, но т.к. капча кастомная, то вставляется она не туда куда надо. Как надо делать: по инструкции @GamiD находите коллбек функции, скорее всего она будет содержать в своем названии "___grecaptcha_cfg.clients". Потом с помощью модуля https://community.bablosoft.com/topic/11187/captchacustom решаете капчу, ее нужно будет вручную настроить, вписать токен сайта. Я его взял из запроса, который ушел через стандартный модуль решения рекапчи. После решения результат оказывается в переменной [[RESPONSE]] Потом в действии выполнить яваскрипт в браузере вписываете строчку с найденной по инструкции callback функции:
___grecaptcha_cfg.clients[1].B.B.callback([[RESPONSE]]);Благодарности @GamiD за инструкцию и @GhostZ за суперский модуль
-
Возникла следующая проблема, название коллбэк функции меняется, а конкретно вот эта ее часть ___grecaptcha_cfg.clients[1].B.B.callback
Не знаю как часто, возможно раз в пару дней и скорее всего не из за меня а просто автоматом такая фича у этрерпрайз версии. Но все равно это черевато сливом денег на антикапчу и времени вникуда если вовремя это не отследить. Вопрос, как то можно это выпарсить название автоматически каким то яваскрипт запросом? -
@GamiD said in помогите вызвать CallbackFunction после ришения капчи:
@serrgo Попробуй код который выше дал засунуть в "Выполнить Javascript На Элементе" в селектор укажи путь во внутренности iframe и запустить
Столкнулся с такой же проблемой.
Уже все советы с форума перепробовал, не хочет выполнятся переход.Подскажите где искать данную функцию
-
@GamiD said in помогите вызвать CallbackFunction после ришения капчи:
@dobrok https://community.bablosoft.com/topic/15414/решение-recaptcha2-с-callback
а в той теме ссылка на эту тему
:D -
@GamiD said in помогите вызвать CallbackFunction после ришения капчи:
@dobrok https://community.bablosoft.com/topic/15414/решение-recaptcha2-с-callback
У меня hcaptcha, скачивал смотрел... не робит.
-
const findRecap = () => { function findRecaptchaClients() { // eslint-disable-next-line camelcase if (typeof (___grecaptcha_cfg) !== 'undefined') { // eslint-disable-next-line camelcase, no-undef 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 (typeof toplevel === 'object' && 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; }); } return []; } return findRecaptchaClients(); }; document.getElementById('g-recaptcha-response').value = [[CAPTCHA_RESPONSE]]; const recapData = findRecap(); const callbackPath = recapData[0].callback; try { eval(`${callbackPath}('${[[CAPTCHA_RESPONSE]]}')`); } catch (e) { console.log("Error when calling the callback:", e); }Лично мне помогает такое решение (в частности для ReCaptcha v2 Invisible):
- Поиск callback'а через этот скрипт, как уже было указано выше.
- Вставка токена, полученного от сервиса, в value для <textarea> с id/name начинающимся на g-recaptcha-response.
- Ну и после вызов найденного callback'а с переданным ему токеном.
*Если, конечно, кому-то это решение еще нужно спустя несколько лет. 👀
