You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:12:18