Blog
Comment trouver la fonction de rappel de chaque version de reCaptcha

Comment trouver la fonction de rappel de chaque version de reCaptcha

WARNING

Chaque site Web est différent, si aucune des méthodes suivantes ne résout le problème.

Veuillez effectuer davantage de recherches par vous-même.

Après avoir obtenu avec succès la valeur gRecaptchaResponse reconnue via l’API, si vous utilisez un logiciel de simulation, tel que Selenium, vous devez exécuter une fonction de rappel pour informer la page Web que nous avons réussi à reconnaître. Apprenons donc comment trouver cette fonction :

Remarque : Dans certains cas, il n’y a effectivement aucune fonction de rappel. Dans ce cas, vous pouvez directement attribuer des valeurs au conteneur g-recaptcha-response et soumettre le formulaire.

Méthode 1 : Rechercher à travers l’élément de la console

Ouvrez la page affichée, appuyez sur F12 pour accéder à la console, appuyez sur Ctrl+F dans la section Éléments pour effectuer une recherche, recherchez le mot-clé : data-callback

Comme vous pouvez le voir, notre fonction de rappel ici est onSuccess, et ensuite nous devons seulement exécuter cette fonction dans selenium

Si vous ne pouvez pas la trouver, cela peut être dû à des confusions ou à d’autres circonstances. Vous pouvez essayer d’autres méthodes.

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

img.png

Méthode 2 : Applicable aux séries reCaptcha V3

Similaire à la méthode 1, recherchez les mots-clés : grecaptcha.render

Trouvez un code similaire, où le rappel est la fonction de rappel

grecaptcha.render('example', {
  'sitekey': 'someSitekey',
  'callback': myCallbackFunction,
  'theme': 'dark'
});

Méthode 3 : Rechercher à travers la console

Appuyez sur F12 pour accéder à la console, entrez ___grecaptcha_cfg.clients, s’il y a une erreur signalée, la page Web n’a pas chargé reCaptcha

Il y a généralement de nombreux nœuds, nous devons prêter attention à la différence, ici onSuccess est la fonction de rappel que nous recherchons

img.png

Méthode 4 : Recherche par une fonction de recherche automatique

Si les méthodes ci-dessus sont difficiles à exécuter, vous pouvez essayer de trouver en définissant une fonction de recherche automatique.

Appuyez sur F12 pour accéder à la console, et entrez la fonction auto-définie suivante findRecaptchaClients()

 
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()

Ensuite, exécutez cette fonction findRecaptchaClients() dans la console pour trouver la fonction correspondante

[
  {
    "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"
  }
]

Comment appeler une fonction anonyme reCaptcha ?

Remarque : Parfois, la fonction de rappel trouvée est un nom de fonction, comme onSuccess mentionné ci-dessus. Vous pouvez directement appeler onSuccess(gRecaptchaResponse) lors de l’appel. Cependant, parfois, elle est trouvée sous forme de fonction anonyme, ce qui signifie qu’il n’y a pas de nom de fonction, comme suit :

Pour ce type de fonction anonyme, il vous suffit de l’exécuter en suivant le chemin complet que nous venons de trouver, et l’effet est le même. Par exemple :

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

Prenons un exemple, prenons ce site Web comme exemple. Entrez ___grecaptcha_cfg.clients pour développer la recherche,

vous pouvez voir que la fonction de rappel ici est promise-callback et c’est une fonction anonyme f(token).

img.png

Nous pouvons faire un clic droit dessus et cliquer sur “Copier le chemin de la propriété” pour copier ce chemin de nœud.

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

Ajoutez le ___grecaptcha_cfg.clients que vous venez de saisir, et vous pouvez obtenir le chemin complet de cette fonction.

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

Enfin, c’est la même méthode d’exécution que celle mentionnée ci-dessus, il suffit de l’exécuter comme une fonction normale.

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