如何查找 hCaptcha 的回调函数

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

 

通过API获取到识别成功的gRecaptchaResponse值之后,如果你是使用模拟类的软件,如selenium,则需要执行回调函数,来告诉网页我们已经识别成功了,那么我们来了解如何查找到这个函数:

 

有表单,无需执行回调函数的情况

当hCaptcha处于表单之内,可以先找到类似name="h-captcha-response"这样的表单元素textarea ,把获取到的gRecaptchaResponse值写入(赋值)到表单元素中,

然后直接提交表单即可。当然这里需要你自己测试,并不是每一个网站都是这样,有的确实需要执行回调函数。

 

如果不会提交表单,

1.可以百度:JS提交表单,用执行JS代码的方式提交表单

2.如果是selenium模拟操作,可以直接点击提交按钮,或者执行提交事件

可以参考:reCaptcha的提交表单方式

 

如果没有表单,就要去找回调函数去执行函数。(有的页面只有一个验证码,并没有表单存在,说明验证通过之后,不是通过表单进入下一步,那就是有回调函数来执行提交到下一步的)

 

 

 

方法一:观察hCaptcha的加载链接

注意观察hCaptcha的加载链接,其中onload就是回调函数,这里是_hcaptchaOnLoad

https://hcaptcha.com/1/api.js?render=explicit&onload=_hcaptchaOnLoad&recaptchacompat=off&sentry=false

PS:如何观察:浏览器按F12:点击Network,搜索api.js,观察加载的链接

如果没有找到上述链接,换其他方式

 

方法二:观察网页html源代码

浏览器按F12:点击Elements,搜索h-captcha,观察data-callback属性

<div class="h-captcha" data-sitekey="51829642-2cda-4b09-896c-594f89d700cc" data-callback="solvedCallback"> …… </div>

此处为solvedCallback,然后可以在Console处执行函数看看是不是我们想要的回调函数

可以看到这里solvedCallback确实是一个函数,这个函数的内容也可以直接看到

这个DEMO这里回调并没有做什么动作,因为这个DEMO是一个表单提交形式的,所以无需执行回调函数。

如果是实际使用中,solvedCallback是一个有效的回调函数的话,可以通过solvedCallback('TOKEN')的形式来执行回调函数。

 

方法三:自动获取回调函数

当代码执行成功后,可以使用window.hcaptchaCallback('TOKEN')这样的形式去执行回调函数

// every 100 ms we check if hcaptcha object is defined window.myInterval = setInterval(() => { if (window.hcaptcha) { console.log('hcaptcha available, lets redefine render method') // if hcaptcha object is defined, we save the original render method into window.originalRender window.originalRender = hcaptcha.render // then we redefine hcaptcha.render method with our function window.hcaptcha.render = (container, params) => { console.log(container) console.log(params) // storing hcaptcha callback globally window.hcaptchaCallback = params.callback // returning the original render method call return window.originalRender(container, params) } clearInterval(window.myInterval) } else { console.log('hcaptcha not available yet') } }, 100) // from now we can execute the callback function like window.hcaptchaCallback('TOKEN')

 

方法四:消息回调

((response) => { for (const ele of document.querySelectorAll("iframe[data-hcaptcha-widget-id]")) { const id = ele.attributes["data-hcaptcha-widget-id"].value; const data = JSON.stringify({ source: "hcaptcha", label: "challenge-closed", id, contents: { event: "challenge-passed", response, expiration: 120 } }); window.dispatchEvent(new MessageEvent('message', {data})) } })('你在平台获取的RESPONSE');

 

Clouflare保护的网站上的hCaptcha的回调函数

这个回调函数是动态的,比如:hcaptchaCallback1633868639408

函数名前半部份固定hcaptchaCallback,后半部份为时间戳

在console中可以输入前半部份,会自动匹配后半部份,

然后点击进入JS代码,通过断点可以分析具体情况

建议有实力的可以研究一下如何获得这个动态的函数

 

关于确实找不到回调函数怎么办?

确实有些网站找不到回调函数,比如discord.com

找不到就放弃呗,直接使用插件,可以通过JS来控制识别

能解决问题就好了

PS:也可以:

  1. 使用图像识别接口

  2. 或者使用我们的基于图像识别接口开发的付费插件