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

使用Cypress批量检查1000个员工状态遇弹窗失败,求多标签页方案

解决Cypress批量检查员工状态的弹窗问题与多标签页实现方案

问题分析

当前代码的核心问题:

  • 短时间内连续提交1000次请求,触发了目标网站的反爬机制(如频率限制、验证弹窗),导致再次运行失败
  • 每次提交后未返回初始页面,后续操作易基于错误的页面上下文执行

可行解决方案

方案一:直接发送HTTP请求(高效规避前端反爬)

目标网站的查询接口支持直接通过GET请求调用,无需模拟页面交互。这种方式跳过前端渲染流程,速度更快,也不容易触发反爬限制。

it('批量检查员工状态(HTTP请求方式)', function () {
  // 生成1000个员工编号
  const receiptNumbers = Array.from({length:1000}, (_, k) => `IOE1234567${k+1}`);
  
  cy.wrap(receiptNumbers).each((receiptNum) => {
    // 加入随机延迟,避免请求过于集中
    cy.wait(Cypress._.random(500, 2000));
    
    cy.request({
      method: 'GET',
      url: 'https://egov.uscis.gov/casestatus/mycasestatus.do',
      qs: { appReceiptNum: receiptNum }
    }).then((response) => {
      // 从响应HTML中提取状态信息
      const statusText = Cypress.$(response.body).find('.rows.text-center h1').text().trim();
      cy.log(`${receiptNum}: ${statusText}`);
      
      // 可按需添加断言,比如校验状态非空
      // expect(statusText).to.not.be.empty;
    });
  });
});

方案二:多标签页模拟真实操作

如果必须模拟浏览器标签页的交互流程,可通过window.open构造新标签页,切换后完成状态查询,再返回初始页面。

it('批量检查员工状态(多标签页方式)', function () {
  cy.visit('https://egov.uscis.gov/casestatus/landing.do');
  
  const receiptNumbers = Array.from({length:1000}, (_, k) => `IOE1234567${k+1}`);
  
  cy.wrap(receiptNumbers).each((receiptNum) => {
    // 延长随机延迟,降低反爬触发概率
    cy.wait(Cypress._.random(1000, 3000));
    
    // 构造查询URL并打开新标签页
    cy.window().then((win) => {
      const queryUrl = `https://egov.uscis.gov/casestatus/mycasestatus.do?appReceiptNum=${receiptNum}`;
      
      // 切换到新标签页并访问查询地址
      cy.visit(queryUrl, { log: false });
      
      // 获取并记录状态信息
      cy.get('.rows.text-center h1').then(($el) => {
        const statusText = $el.text().trim();
        cy.log(`${receiptNum}: ${statusText}`);
      });
      
      // 返回初始页面,准备下一次查询
      cy.visit('https://egov.uscis.gov/casestatus/landing.do', { log: false });
    });
  });
});

额外注意事项

  • 反爬规避:必须保留随机延迟,避免固定间隔的请求模式;若遇到验证码拦截,需集成验证码识别工具(如2Captcha),但会增加实现复杂度
  • 性能优化:HTTP请求方式的效率远高于页面交互,建议优先采用;多标签页模式需控制请求节奏,避免浏览器因资源过载崩溃
  • 错误处理:可在代码中添加try/catch块,处理单个请求失败的情况,防止测试因单次异常终止

内容的提问来源于stack exchange,提问作者Hema Nandagopal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:05:28