Comment trouver la fonction de rappel de chaque version de reCaptcha
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
- Méthode 2 : Applicable aux séries reCaptcha V3
- Méthode 3 : Rechercher à travers la console
- Méthode 4 : Recherche par une fonction de recherche automatique
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}")')
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
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)
.
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)