Google Enterprise reCAPTCHA v3结合Selenium测试始终返回0.9分问题排查
我已将Google Enterprise reCAPTCHA v3集成到HTML和JavaScript联系表单中,为验证其有效性,使用Selenium进行自动化测试以确认验证码能否准确识别机器人。但提交100次表单后,验证码始终返回0.9分(判定为人类操作),这与预期不符,我期望Selenium自动化请求能得到0.0-0.3的评分。
前端代码如下:
function onClick(e) { e.preventDefault(); // Prevents the default form submission behavior const captchaTokens = document.querySelectorAll(".form__recaptcha"); for (let captchaToken = 0; captchaToken < captchaTokens.length; captchaToken++) { const element = captchaTokens[captchaToken]; grecaptcha.enterprise.ready(async () => { // Ensures the reCAPTCHA library is fully loaded const token = await grecaptcha.enterprise.execute('6Le-Ia0p********NLj***LTVR******bJC1uF', {action: 'Testing__contact_form'}); // Executes reCAPTCHA with a specific action ('Testing__contact_form') element.value = token; // MY FETCH CALL RUN HERE }); } } onClick(event)
请问该差异的原因是什么?是否有人遇到过类似的Enterprise reCAPTCHA v3与Selenium自动化的问题?恳请提供排查及解决的建议。
可能的原因
Selenium配置规避了自动化检测
reCAPTCHA v3会通过浏览器的自动化特征(如window.navigator.webdriver属性、Chrome的自动化标识)识别机器人。如果你的Selenium配置了反检测参数(比如--disable-blink-features=AutomationControlled),会让reCAPTCHA无法识别出自动化环境,从而给出高分。测试脚本缺乏真实机器人的行为特征
reCAPTCHA v3的评分核心是用户交互行为分析(鼠标轨迹、输入间隔、页面停留时长等)。你的测试代码直接调用onClick函数,跳过了真实用户的操作流程(填写表单、鼠标移动到按钮、点击动作),这种“无交互触发”的行为反而不符合典型机器人的操作模式,导致reCAPTCHA没有足够数据判定为机器人。本地环境的IP/设备历史行为干扰
如果测试使用的是日常办公的本地IP,该IP有大量正常人类操作的历史记录,reCAPTCHA会基于IP的信誉给出高分,而非仅看当前的自动化操作。Enterprise reCAPTCHA站点配置宽松
可能你在Google reCAPTCHA控制台中,针对站点或Testing__contact_form这个action的风险检测设置过于宽松,或者reCAPTCHA还在学习站点的正常行为模式,暂时未将自动化请求标记为高风险。
排查与解决建议
调整Selenium配置,暴露自动化特征
- 移除所有反检测参数,确保
window.navigator.webdriver返回true; - 使用无头模式(
--headless=new),无头浏览器的行为特征更容易被reCAPTCHA识别; - 不要使用隐身模式或清理缓存,保留浏览器的自动化痕迹。
- 移除所有反检测参数,确保
模拟典型机器人的操作行为
- 不要直接调用
onClick,用Selenium模拟真实机器人的流程:随机输入表单内容(每个字符停顿100-300ms)、随机移动鼠标到按钮、点击按钮; - 增加页面加载后的随机停顿(2-5秒),模拟无意义的页面滚动、随机点击其他元素;
- 缩短操作间隔,模拟机器人快速完成操作的特征。
- 不要直接调用
检查reCAPTCHA控制台配置
- 登录控制台查看站点的风险分析设置,开启严格的机器人检测;
- 查看
Testing__contact_formaction的历史评分数据,确认是否有其他自动化请求被正确识别; - 切换到代理IP测试,避免本地IP的信誉干扰。
验证后端token解析的准确性
- 在后端打印Google reCAPTCHA的完整响应,确认返回的0.9分确实来自Google,而非前端代码的错误处理或固定值。
尝试更专业的自动化工具
- 改用Playwright,它的默认配置更贴近真实浏览器,但也可配置更多自动化特征触发低分;
- 使用专门的CAPTCHA测试工具验证配置有效性。
内容的提问来源于stack exchange,提问作者sajeevan Balasingam

