Wie man die Rückruffunktion jeder Version von reCaptcha findet

⚠️ Jede Website ist anders, wenn keiner der folgenden Methoden das Problem lösen kann.
Bitte recherchieren Sie selbst weiter.
Nachdem Sie den erfolgreich erkanntengRecaptchaResponse
Wert über die API erhalten haben, wenn Sie Simulationssoftware verwenden, wie Selenium, müssen Sie eine Rückruffunktion ausführen, um der Webseite mitzuteilen, dass wir erfolgreich erkannt haben, also lernen wir, wie man diese Funktion findet:
Hinweis: In einigen Fällen gibt es tatsächlich keine Rückruffunktion. In diesem Fall können Sie direkt Werte dem g-recaptcha-response Container zuweisen und das Formular absenden.
Methode 1: Suche über das Konsolenelement
Öffnen Sie die angezeigte Seite, drücken Sie F12, um die Konsole zu betreten, drücken Sie Strg+F in den Elementen zur Suche, Suchbegriff: data-callback
Wie Sie sehen können, ist unsere Rückruffunktion hier onSuccess
, und dann müssen wir diese Funktion nur in Selenium ausführen
Wenn Sie es nicht finden können, kann es verwirrt sein oder andere Umstände, Sie können andere Methoden ausprobieren
driver.execute_script(f'onSuccess(\"{gRecaptchaResponse}\")')

Methode 2: Anwendbar auf die recaptcha-v3 Serie
Ähnlich wie Methode 1, Suchbegriffe: grecaptcha.render
Finden Sie ähnlichen Code, wo callback die Rückruffunktion ist
grecaptcha.render('example', {
'sitekey': 'someSitekey',
'callback': myCallbackFunction,
'theme': 'dark'
});
Methode 3: Suche über die Konsole
Drücken Sie F12, um die Konsole zu betreten, geben Sie ___grecaptcha_cfg.clients
ein, wenn ein Fehler gemeldet wird, hat die Webseite reCaptcha
nicht geladen
Normalerweise gibt es viele Knoten, wir müssen auf den Unterschied achten, hier ist onSuccess die Rückruffunktion, die wir suchen
Methode 4: Suche durch automatische Suchfunktion
Wenn es schwierig ist, die oben genannten Methoden auszuführen, können Sie versuchen, durch Definieren einer automatischen Suchfunktion zu finden
Drücken Sie F12, um die Konsole zu betreten, und geben Sie die folgende automatisch definierte Funktion findRecaptchaClients() ein
Funktion 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()
Führen Sie dann diese Funktion findRecaptchaClients()
in der Konsol
e aus, um die entsprechende Funktion zu finden
[
{
"id": "0",
"version": "V2",
"sitekey": "site key",
"function": "onSuccess",
"callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
"pageurl": "site url"
}
]
Wie ruft man die anonyme Funktion von reCaptcha auf?
Hinweis: Manchmal ist die gefundene Rückruffunktion ein Funktionsname, wie oben erwähnt onSuccess, direkt onSuccess(gRecaptchaResponse)
beim Aufruf, aber manchmal wird festgestellt, dass es eine anonyme Funktion ist, was bedeutet, dass es keinen Funktionsnamen gibt, wie das Folgende:
Für diese Art von anonymen Funktionen müssen wir sie nur nach dem vollständigen Pfad, den wir gerade gefunden haben, ausführen, und die Wirkung ist die gleiche, zum Beispiel:
___grecaptcha_cfg.clients.xxxxxxxxx.xxxxx.xxxxx.callback(gRecaptchaResponse)
Lassen Sie uns ein Beispiel geben, nehmen Sie diese Website als Beispiel, geben Sie ___grecaptcha_cfg.clients
ein, um die Suche zu erweitern, Sie können sehen, dass die Rückruffunktion hier promise-callback
eine anonyme Funktion f(token)
ist
Wir können mit der rechten Maustaste darauf klicken und auf Eigenschaftspfad kopieren klicken
, um diesen Knotenpfad zu kopieren
[100000].l.l["promise-callback"]("gRecaptchaResponse")
Fügen Sie die gerade eingegebene ___grecaptcha_cfg.clients
hinzu, und Sie können den vollständigen Pfad dieser Funktion erhalten
___grecaptcha_cfg.clients[100000].l.l["promise-callback"]
Schließlich ist es die gleiche wie die oben erwähnte Ausführungsmethode, führen Sie es einfach als normale Funktion aus
___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)
Capsolver Team 💜