版本比较

密钥

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

信息

注意:有某些情况下,确实是没有回调函数,这种可以直接给g-recaptcha-response容器赋值然后提交表单即可。

目录

方法一:通过控制台Elements进行搜索

打开显示的页面,按F12进入控制台,在Elements处按Ctrl+F进行搜索,搜索关键词:data-callback

...

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

...

方法二:适用于reCaptcha V3系列

与方法一类似,搜索关键词:grecaptcha.render

...

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

方法三:通过控制台Console查找

按F12,进入console, 输入 ___grecaptcha_cfg.clients,如果报错,则这个网页没有加载reCaptcha

通常有很多节点,需要注意区别,这里onSuccess就是我们要找的回调函数

...

方法四:通过自动查找函数查找

如果以上方法执行都有困难,可以尝试这种通过定义自动查找函数的方式查找

...

代码块
languagejs
[
    {
        "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"
    }
]

如下图

...

reCaptcha 匿名函数怎么调用?

注意:有时候找到的回调函数是一个函数名,比如上面提到的onSuccess,调用时直接onSuccess(gRecaptchaResponse) ,但有时候查到是一个匿名函数,匿名函数的意思就是没有函数名,比如下面这种:

...

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

方法五:全类型自动注入 (测试)

代码块
(function (response) {
  const ele = document.getElementById("g-recaptcha-response");
  if (ele) {
    ele.innerHTML = response;
    ele.text = response;
  }

  const base = Object.values(___grecaptcha_cfg.clients)[0];
  for (let k0 of Object.keys(base)) {
    for (let k1 of Object.keys(base[k0])) {
        if (base[k0][k1] && base[k0][k1].callback && typeof base[k0][k1].callback === 'function') {
          base[k0][k1].callback(response);
          return true;
        }
    }
  }
  return false;
})('你在平台获取的RESPONSE');