Wie man die Rückruffunktion jeder Version von reCaptcha findet
Jede Website ist anders, und wenn keine der folgenden Methoden das Problem lösen kann.
Bitte recherchieren Sie selbst weiter.
Nachdem Sie den erfolgreich erkannten Wert gRecaptchaResponse
über die API erhalten haben und Simulationssoftware verwenden, wie z.B. Selenium, müssen Sie eine Rückruffunktion ausführen, um der Webseite mitzuteilen, dass wir erfolgreich erkannt haben. Erfahren Sie, wie Sie diese Funktion finden:
Hinweis: In einigen Fällen gibt es tatsächlich keine Rückruffunktion. In diesem Fall können Sie direkt Werte an den Container g-recaptcha-response
zuweisen und das Formular absenden.
- Methode 1: Suche über das Konsolen-Element
- Methode 2: Anwendbar auf reCaptcha V3-Serie
- Methode 3: Suche über die Konsole
- Methode 4: Suchen per automatischer Suchfunktion
Methode 1: Suche über das Konsolen-Element
Öffnen Sie die angezeigte Seite, drücken Sie F12, um die Konsole zu öffnen, drücken Sie Strg+F in “Elements”, um zu suchen, suchen Sie nach dem Schlüsselwort: 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 reCaptcha V3-Serie
Ähnlich wie Methode 1, suchen Sie nach Schlüsselwörtern: grecaptcha.render
Finden Sie ähnlichen Code, wobei 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 öffnen, geben Sie ___grecaptcha_cfg.clients
ein. Wenn ein Fehler gemeldet wird, wurde die Webseite nicht mit reCaptcha
geladen.
Normalerweise gibt es viele Knoten, auf die wir achten müssen, hier ist onSuccess
die gesuchte Rückruffunktion
Methode 4: Suchen per automatischer Suchfunktion
Wenn es schwer 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 öffnen, und geben Sie die folgende automatisch definierte Funktion findRecaptchaClients()
ein
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()
Führen Sie dann diese Funktion findRecaptchaClients()
in der Konsole
aus, um die entsprechende Funktion zu finden
[
{
"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"
}
]
Wie ruft man die reCaptcha
anonyme Funktion auf?
Hinweis: Manchmal ist die gefundene Rückruffunktion ein Funktionsname, wie onSuccess
oben erwähnt, direkt onSuccess(gRecaptchaResponse)
beim Aufruf, aber manchmal wird festgestellt, dass es sich um eine anonyme Funktion handelt, was bedeutet, dass kein Funktionsname vorhanden ist, wie im Folgenden:
Für diese Art von anonymer Funktion müssen wir sie nur entsprechend dem gerade gefundenen vollständigen Pfad ausführen, und der
Effekt ist derselbe, 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 die Rückruffunktion hier sehen promise-callback
ist eine anonyme Funktion f(token)
Wir können mit der rechten Maustaste darauf klicken und “Eigenschaftspfad kopieren” auswählen, um diesen Knotenpfad zu kopieren
[100000].l.l["promise-callback"]("gRecaptchaResponse")
Fügen Sie das gerade eingegebene ___grecaptcha_cfg.clients
hinzu, und Sie erhalten den vollständigen Pfad dieser Funktion
___grecaptcha_cfg.clients[100000].l.l["promise-callback"]
Schließlich ist es genauso wie die oben genannte Ausführungsmethode, führen Sie es einfach wie eine normale Funktion aus
___grecaptcha_cfg.clients[100000].l.l["promise-callback"](gRecaptchaResponse)