Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

每个网站都不一样,如果以下方式都不能解决问题,烦请您自己多研究研究,您可以的。

 

...

1. 通过浏览器控制台Network获取参数

打开包含的网页,按F12->Network,

获取websiteKey

...

搜索关键词 anchor

...

,可以在URL中找到websiteKey,例如以下链接中k值就是websiteKey:可以在URL中找到,例如以下链接中k值为6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9

Code Block
https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=aHR0cHM6Ly9yZWNhcHRjaGEtZGVtby5hcHBzcG90LmNvbTo0NDM.&hl=en&v=qljbK_DTcvY1PzbR7IG69z1r&size=normal&cb=3gteobhlohbk

...

获取websiteURL

websiteURL:该URL一般为当前使用了reCaptcha页面的url,有时也会有该url与当前页面url不一致的情况,如果出现这种情况,请检查https://www.google.com/recaptcha/api2/anchor网络包中的请求头referer对应的域名是否与当前域名一致,如果不一致,则以referer中为准

Code Block
referer: https://recaptcha-demo.appspot.com/
View file
nameInvalid file id - 0c73f35c-e680-443d-8942-0855ddbee0e4

2、获取 pageAction 值

reCaptcha v3 需要action值,而且必须正确,通过网页源代码中搜索关键词 grecaptcha

...

获取pageAction值

reCaptcha v3 需要pageAction值,如果该值错误,则很大程度影响token的分值,通过网页源代码中搜索关键词 grecaptcha,其中action: xxxxx 就是我们要的值,例如:

Code Block
grecaptcha.ready(function() {
    grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', 
    {action: 'login'}).then(function(token) {
    });
});
View file
nameInvalid file id - 18f7eb9e-cccb-4114-aa75-303fe45c067f

如果网页中搜索不到,则可能是js被混肴、加密了,需要尝试其他方式

 

第三种:通过自动识别函数获取参数

打开出现验证码的网页,按F12键,进入console,

...

这种方法一般来说经常会搜索不到pageAction,所以需要其他方法

2. 通过自动识别函数获取参数

打开出现验证码的网页,按F12键,进入console,输入自定义函数findRecaptchaClients()执行

不会操作的,下面有张图

Code Block
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()

...

Code Block
[
    {
        "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"
    }
]

如下图

View file
nameInvalid file id - ce4787a4-4a7b-4d4c-9f03-9a812ed04994

 

...

 3. 通过Charles抓包获取参数(最好的方法)

最好的方法是通过Charles抓包软件获取网站数据包详细数据,但是这种方法具有一定的门槛,需要了解一定的网络抓包知识。如何使用Charles?

获取websiteKey

准备好您的Charles后,打开使用了reCaptcha的网站,可以在www.google.comwww.recaptcha.net域名下抓取到发送给谷歌的数据包,其中anchor请求可以在Content->Query String中找到k值,即websiteKey,同时也可以看到size值,为normal,所以它不是invisible版本。

...

获取websiteURL

与上述方法一致

获取pageAction值

我们打开一个reCaptcha v3的演示站,根据页面上的提示触发验证后,浏览器会向谷歌发送一个reload请求,(在别的网站中,触发的方式各有不同,有的可能是在登录按钮点击后触发,有的可能进入页面就会自动触发)。该请求中包含了大量的加密数据,使用Charles点击该数据包,在Content->Protobuf中可以看到经过Charles Protobuf解码后的数据,其中第八位数据(fields 8)就是pageAction正确的值

...