@FastSpace подскажи, это какую функцию имеешь ввиду?
Условно говоря у меня идут действия от одного к другому.
Проверка существования элемента, если его не видно значит нужно выполнить клик по элементу
Если ошибка клика по элементу, т.к он не найден, ставить проверку существования элемента отвечающего за капчу?
помогите вызвать CallbackFunction после ришения капчи
-
@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'а с переданным ему токеном.
*Если, конечно, кому-то это решение еще нужно спустя несколько лет. 👀
