CAPSOLVER
Блог
Как найти функцию обратного вызова каждой версии reCaptcha

Как найти функцию обратного вызова каждой версии reCaptcha

Logo of CapSolver

Nikolai Smirnov

Software Development Lead

13-Jun-2023

Как найти функцию обратного вызова каждой версии reCaptcha

⚠️ Каждый сайт уникален, если ни один из следующих методов не может решить проблему.
Пожалуйста, проведите дополнительные исследования самостоятельно.

После получения успешно распознанного значения gRecaptchaResponse через API, если вы используете программное обеспечение для моделирования, такое как selenium, вам нужно выполнить функцию обратного вызова, чтобы сообщить веб-странице, что мы успешно распознали, давайте узнаем, как найти эту функцию:

Примечание: В некоторых случаях функции обратного вызова действительно может не быть. В этом случае вы можете напрямую присвоить значения контейнеру g-recaptcha-response и отправить форму.

Метод 1: Поиск через элемент консоли

Откройте отображаемую страницу, нажмите F12, чтобы войти в консоль, нажмите Ctrl+F в Элементах для поиска, ищите ключевое слово: data-callback

Как вы можете видеть, наша функция обратного вызова здесь - onSuccess, и затем нам нужно только выполнить эту функцию в selenium

Если вы не можете найти ее, она может быть запутана или возникли другие обстоятельства, вы можете попробовать другие методы

Copy
driver.execute_script(f'onSuccess("{gRecaptchaResponse}")')


Метод 2: Применимо к серии recaptcha-v3

Аналогично методу 1, ищите ключевые слова: grecaptcha.render

Найдите похожий код, где callback - это функция обратного вызова

Copy
grecaptcha.render('example', {
  'sitekey': 'someSitekey',
  'callback': myCallbackFunction,
  'theme': 'dark

Метод 3: Поиск через консоль

Нажмите F12, чтобы войти в консоль, введите ___grecaptcha_cfg.clients, если сообщается об ошибке, веб-страница не загрузила reCaptcha

Обычно есть много узлов, нам нужно обратить внимание на разницу, здесь onSuccess - это искомая функция обратного вызова

Метод 4: Поиск с помощью функции автоматического поиска

Если трудно выполнить вышеупомянутые методы, вы можете попытаться найти, определив функцию автоматического поиска
Нажмите F12, чтобы войти в консоль, и введите следующую автоопределенную функцию findRecaptchaClients()

Copy
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 []
}

findRecaptchaClients && findRecaptchaClients

Затем выполните эту функцию findRecaptchaClients() в console, чтобы найти соответствующую функцию

Copy
[
  {
    "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?

Обратите внимание: иногда найденная функция обратного вызова - это имя функции, например, упомянутое выше onSuccess, прямо onSuccess(gRecaptchaResponse) при вызове, но иногда она обнаруживается как анонимная функция, что означает, что у нее нет имени функции, например следующее:

Для этого типа анонимной функции нам просто нужно выполнить ее согласно полному пути, который мы только что нашли, и эффект будет таким же, например:

Copy
___grecaptcha_cfg.clients.xxxxxxxxx.xxxxx.xxxxx.callback(gRecaptchaResponse)

Давайте приведем пример, возьмем этот сайт в качестве примера, введите ___grecaptcha_cfg.clients для расширения поиска, вы можете увидеть здесь функцию обратного вызова promise-callback - это анономная функция f(token)

Мы можем щелкнуть правой кнопкой мыши по нему и щелкнуть Copy property path, чтобы скопировать этот путь узла

Copy
[100000].l.l["promise-callback"]("gRecaptchaResponse")

Добавьте только что введенный ___grecaptcha_cfg.clients, и вы можете получить полный путь этой функции

Copy
___grecaptcha_cfg.clients[100000].l.l["promise-callback"]

Наконец, это такой же, как метод выполнения, упомянутый выше, просто выполните его как обычную функцию

Copy
___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)

Capsolver Team 💜

Дисклеймер о соблюдении: Информация, представленная в этом блоге, предназначена только для справочных целей. CapSolver обязуется соблюдать все применимые законы и нормы. Использование сети CapSolver для незаконной, мошеннической или злоупотребляющей деятельности строго запрещено и будет расследовано. Наши решения для распознавания капчи улучшают пользовательский опыт, обеспечивая 100% соблюдение при помощи в решении трудностей с капчей в процессе сбора общедоступных данных. Мы призываем к ответственному использованию наших услуг. Для получения дополнительной информации, пожалуйста, посетите наши Условия обслуживания и Политику конфиденциальности.

Ещеe

Какой лучший решатель reCAPTCHA v2 и v3 при веб-скрапинге в 2025 году
Что является лучшим решателем reCAPTCHA v2 и v3 при веб-скрапинге в 2025 году

В 2025 году, с повышением сложности антибот-систем, поиск надежных решателей reCAPTCHA стал критическим для успешного извлечения данных.

reCAPTCHA
Logo of CapSolver

Nikolai Smirnov

17-Jan-2025

Решение reCAPTCHA с помощью AI-распознавания в 2025 году
Решение reCAPTCHA с помощью AI-распознавания в 2025 году

Исследуйте, как ИИ преобразует процесс решения reCAPTCHA, решения CapSolver и меняющийся ландшафт безопасности CAPTCHA в 2025 году.

reCAPTCHA
Logo of CapSolver

Nikolai Smirnov

11-Nov-2024

Решение reCAPTCHA с помощью Python, Java и C++
Решение reCAPTCHA с использованием Python, Java и C++

Как успешно решать reCAPTCHA с помощью трех мощных языков программирования: Python, Java и C++ в одном блоге? Давай!

reCAPTCHA
Logo of CapSolver

Nikolai Smirnov

25-Oct-2024

Как решать reCAPTCHA v2 с помощью Rust
Как решить reCAPTCHA v2 с помощью Rust

Узнайте, как решать reCaptcha v2 с помощью Rust и API Capsolver. Это руководство охватывает как методы с прокси, так и без прокси, предоставляя пошаговые инструкции и примеры кода для интеграции решения reCaptcha v2 в ваши приложения Rust.

reCAPTCHA
Logo of CapSolver

Nikolai Smirnov

17-Oct-2024

Руководство по решению reCAPTCHA v3 с высокими баллами на Python
Руководство по решению reCAPTCHA v3 с высокими баллами на Python

Это руководство проведет вас через эффективные стратегии и приемы Python для решения reCAPTCHA v3 с высокими баллами, гарантируя бесперебойную работу ваших задач автоматизации.

reCAPTCHA
Logo of CapSolver

Nikolai Smirnov

17-Sep-2024

Как интегрировать решения reCAPTCHA v2 в Python для извлечения данных
Как интегрировать решения reCAPTCHA v2 в Python для извлечения данных

Узнайте, как интегрировать решения reCAPTCHA v2 в Python для беспроблемного извлечения данных. Изучите версии reCAPTCHA, разберитесь в извлечении данных и следуйте простому примеру с использованием Capsolver для автоматизации решения задач reCAPTCHA v2.

reCAPTCHA
Logo of CapSolver

Nikolai Smirnov

10-Sep-2024