为何Invisible reCAPTCHA无法检测我的Selenium脚本?
Invisible reCAPTCHA未检测到Selenium脚本的原因分析
1. 未在关键交互节点触发验证逻辑
Invisible reCAPTCHA(v3)依赖用户交互行为采集数据并打分,你当前仅加载了reCAPTCHA脚本,但可能未在登录按钮点击这个核心动作时调用grecaptcha.execute()生成验证token。如果不在用户触发登录的瞬间触发验证,reCAPTCHA无法采集该交互过程中的行为数据,自然无法识别自动化操作。
正确的做法是在登录按钮的点击事件中绑定验证逻辑,示例如下:
document.getElementById('sendBtn').addEventListener('click', function(e) { e.preventDefault(); grecaptcha.execute('你的site-key', {action: 'login'}).then(function(token) { // 将token附加到登录请求中提交给后端 document.getElementById('recaptcha-token').value = token; // 执行登录提交 document.getElementById('login-form').submit(); }); });
2. Selenium脚本行为过于贴近真人
你的脚本加入了sleep(1)等待,且每次操作后都会等待页面提示,这种节奏和真人手动登录的行为模式高度相似。reCAPTCHA v3基于用户行为特征(输入速度、交互顺序、等待时长等)打分,脚本模拟的行为未触发异常特征,因此得到了0.9的高分(分数越高越判定为真人)。
若要测试检测效果,可以去掉sleep、加快输入速度,或加入机械重复操作,观察分数是否下降。
3. 后端未根据分数执行拦截
即使reCAPTCHA返回了分数,若后端仅调用siteverify接口,却未设置分数阈值(比如低于0.5则拦截)执行限制操作,那么即使脚本被识别,也不会被阻止。检查你的后端代码,确认验证token后是否对低分请求进行了拦截或二次验证。
4. reCAPTCHA显式渲染未正确初始化
你使用了render=explicit的加载模式,但可能未正确调用grecaptcha.render()完成实例初始化,导致reCAPTCHA无法正常采集页面行为数据。确保页面加载完成后执行初始化逻辑:
grecaptcha.ready(function() { grecaptcha.render('sendBtn', { 'sitekey': '你的site-key', 'callback': function(token) { // 处理验证成功后的逻辑 } }); });
内容的提问来源于stack exchange,提问作者Gabriel Borges
相关产品推荐
相关产品推荐

