如何让Cypress测试被reCAPTCHA v3判定为机器人(得分≤0.5)
让Cypress测试被reCAPTCHA v3判定为机器人的方法
reCAPTCHA v3主要依据用户行为模式(输入节奏、鼠标移动、浏览器特征等)打分,Cypress默认的自动化操作过于规整,不容易被判定为机器人。可以通过以下几种方式刻意触发低得分:
模拟非人类输入节奏:Cypress的
type命令默认输入速度均匀,改成极快或无延迟输入,或者跳过模拟按键直接设置输入框值,模拟机器人的机械操作:When('用户填写其DNI {string}', (dni) => { // 无延迟快速输入 homePage.getInputDNI().type(dni, { delay: 0 }); // 或者直接设置输入框值,跳过按键模拟 // homePage.getInputDNI().invoke('val', dni).trigger('change'); });暴露自动化工具标识:Cypress默认会隐藏
navigator.webdriver这类自动化特征,关闭伪装后让reCAPTCHA检测到是自动化测试:- 在
cypress.config.js中配置:module.exports = { e2e: { experimentalModifyObstructiveThirdPartyCode: false, // 其他原有配置 } } - 或者在访问页面时手动修改浏览器属性:
cy.visit('你的页面地址', { onBeforeLoad(win) { Object.defineProperty(win.navigator, 'webdriver', { get: () => true, }); }, });
- 在
添加异常行为:模拟机器人的无意义操作,比如快速随机点击页面空白处、无规律滚动,或者打乱表单填写顺序:
// 在填写DNI前添加随机点击 cy.get('body').click(Math.random() * 1000, Math.random() * 1000); When('用户填写其DNI {string}', (dni) => { homePage.getInputDNI().type(dni); });测试环境直接修改得分(仅限自有环境):如果是自己控制的测试环境,可以直接通过前端代码篡改reCAPTCHA的token得分,或者在后端mock低得分结果,这种方式最直接,不需要模拟行为。
原代码片段翻译:
When('用户填写其DNI {string}', (dni) => { homePage.getInputDNI().type(dni) });
内容的提问来源于stack exchange,提问作者Abel Huanacchiri
相关产品推荐
相关产品推荐

