помогите вызвать CallbackFunction после ришения капчи

Поддержка
  • Смотрел модуль recaptcha2 так и не понял каким образом ищет callback

  • @GamiD
    сделал как у вас на инструкции: видало в консоль так же как у вас:
    ___grecaptcha_cfg.clients[0].L.L.callback
    Тоесть ето и есть названия колбек функции?
    Дальше запустил етот код в действия Яваскрипт:
    ___grecaptcha_cfg.clients[0].L.L.callback();
    Но нечего не произошло. У вас как?

  • @selector так же в чем проблема не знаю то что нашел в инете показал надо проверять искать еще информации

  • 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 за суперский модуль

  • @serrgo Рад что смог помочь=)

  • Возникла следующая проблема, название коллбэк функции меняется, а конкретно вот эта ее часть ___grecaptcha_cfg.clients[1].B.B.callback
    Не знаю как часто, возможно раз в пару дней и скорее всего не из за меня а просто автоматом такая фича у этрерпрайз версии. Но все равно это черевато сливом денег на антикапчу и времени вникуда если вовремя это не отследить. Вопрос, как то можно это выпарсить название автоматически каким то яваскрипт запросом?

  • @serrgo Попробуй код который выше дал засунуть в "Выполнить Javascript На Элементе" в селектор укажи путь во внутренности iframe и запустить

  • @GamiD said in помогите вызвать CallbackFunction после ришения капчи:

    @serrgo Попробуй код который выше дал засунуть в "Выполнить Javascript На Элементе" в селектор укажи путь во внутренности iframe и запустить

    Столкнулся с такой же проблемой.
    Уже все советы с форума перепробовал, не хочет выполнятся переход.

    Подскажите где искать данную функцию

  • @Fox :D там же сам скрипт
    50cf56a9-6ceb-4376-aea0-24136c53700a-image.png

  • @dobrok Если хорошо поищешь найдешь модуль на форуме для автоматического решения hcaptcha

  • @GamiD не работает, по крайней мере сейчас тык

  • есть что то актуальное ? как найти callback

  • @persiss

    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'а с переданным ему токеном.

    *Если, конечно, кому-то это решение еще нужно спустя несколько лет. 👀