Blog
So finden Sie die Rückruffunktion jeder Version von reCaptcha

Wie man die Rückruffunktion jeder Version von reCaptcha findet

WARNING

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

Ö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}")')

img.png

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

img.png

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)

img.png

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)