puppeteer实现网页自动化

用puppeteer实现网页的自动化

描述

公司要打卡,老爱忘记打卡的不行。根据现有的条件想了一种方案,现在实现。
主要思路:
1、如何查询有没有打卡
2、如何通知我

如何查询有没有打卡

第一种:使用网页查询
第二种:使用app查询

我们选第一种网页查询

如何通知我

第一种:使用微信通知
第二种:使用邮箱通知(在手机绑定邮箱后,有新邮件手机会下拉框通知)

实现

网页查询

选用puppeteer

打开并登陆
const browser = await puppeteer.launch({ headless: false });//打开在调试模式
const page = await browser.newPage();
await page.goto("http://www.a.com");//打开的网站
await page.type("#username", "username");//用户名
await page.type("#password", "password");//密码
await page.click("#loginnew");//点击登陆按钮
await delay(10000);//登录后资源准备时间较长,延时10秒

delay函数

function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

获取排班和打卡记录

此处不再贴具体代码,主要讲一下用到的函数和逻辑

iframe

在网页中,之前都是用上面的page操作,但登陆后的网页它有嵌套网页,这时候要找到iframe元素

    let frames = await page.frames();
    let iframe = frames.find((frame) => frame.name() === "000000");
元素不好点击
    let element = await iframe.$(
      "#aaa"
    );
    await element.evaluate((b) => b.click());
    await delay(3000);
数据整理

将网页中需要的数据整理处理,放到对象中。
一个排班表,另一个打卡表

    schedulingTable = await iframe.evaluate(
      getTbodyTextArray,
      "#table1"
    );
    checkInTable = await iframe.evaluate(
      getTbodyTextArray,
      "#table"
    );
function getTbodyTextArray(selector) {
  // 获取<tbody>元素
  const tbodyElement = document.querySelector(selector);
  // 初始化一个数组来存储每个子节点的文本内容
  const tbodyTextArray = [];
  // 遍历<tbody>中的每个子节点
  tbodyElement.childNodes.forEach((childNode) => {
    // 检查节点类型是否为元素节点
    if (childNode.nodeType === 1) {
      // 将子节点的文本内容添加到数组中
      let array = [];
      for (const key in childNode.childNodes) {
        if (childNode.childNodes[key].childNodes) {
          array.push(
            childNode.childNodes[key].childNodes[0].textContent.trim()
          );
          continue;
        }
        array.push("");
      }
      // 将子节点的文本内容添加到数组中
      tbodyTextArray.push(array);
    }
  });
  // 返回包含<tbody>内容的数组
  return tbodyTextArray;
}

打卡结果判断

判断是工作日还是非工作日
 let { checkInTable, schedulingTable } = await getTableValues();
  if(checkInTable==null){
    return {result :false,reason:'获取打卡记录失败'}
  }
  if(checkInTable==null){
    return {result :false,reason:'获取排班记录失败'}
  }
  let scheduling = null
  for (let i = 0; i < schedulingTable.length; i++) {
    const element = schedulingTable[i];
    if(element[0]==date){
      scheduling = element
    }
  }
  if(schedule==null){
    return {result :false,reason:'无法获取排班信息'}
  }
  if(scheduling[4]!='工作日'){
    return {result :true,reason:'当前非工作日'}
  }

判断是否打卡
  let dates = date.split('-')
  let md = dates[1]+'-'+dates[2]
  let cTime = ''
  for (let i = 0; i < checkInTable.length; i++) {
    const element = checkInTable[i];
    if(element[0].includes(md)){
        cTime = element[chi]//chi是打卡的时间
    }
  }
  if(cTime){
    return {result :true,reason:'打卡时间:'+cTime}
  }else{
    return {result :false,reason:'未打卡'}
  }
chi打卡时间

一般而言,一天只需要打卡四次。
早上上班,中午下班,中午上班,下午下班

chi是获取班次的table列

定时器

一天需要在指定的时间去获取打卡记录,用定时器触发检测。

schedule.scheduleJob("0 5 8 * * *", function () {
  task(1);
});//早上8点前的打卡记录
schedule.scheduleJob("0 5 12 * * *", function () {
  task(2);
});
schedule.scheduleJob("0 20 12 * * *", function () {
  task(3);
});//中午下班获取两次
schedule.scheduleJob("0 5 14 * * *", function () {
  task(4);
});//下午上班的打卡记录
schedule.scheduleJob("0 20 18 * * *", function () {
  task(5);
});
schedule.scheduleJob("0 40 18 * * *", function () {
  task(6);
});//下午下班获取两次

发邮件

  let date = dayjs().format('YYYY-MM-DD')
  let result = null
  switch (key) {
    case 1:
      result = await main(date,3,0);
      break;
    case 2:
    case 3:
      result = await main(date,4,0);
      break;
    case 4:
      result = await main(date,5,0);
      break;
    case 5:
    case 6:
      result = await main(date,6,0);
      break;
    default:
      break;
  }
  options.text = result.reason
  await sendMail(options)

将代码变为服务

用pm2把实现的代码变为服务,运行在我们电脑后台。

写在最后

本文只提供一种思路的实现方法,具体的需要自行调整。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现网页自动化测试,可以采用以下步骤: 1.选择适合的测试框架:根据自己的需求和技术水平,选择适合自己的测试框架,比如Selenium、Puppeteer、Playwright等。 2.安装测试工具:根据选择的测试框架,安装相应的测试工具和依赖,如webdriver、Chrome或Firefox浏览器驱动等。 3.编写测试脚本:使用编程语言编写测试脚本,包括测试用例、测试数据和断言。测试脚本可以通过模拟用户交互操作来验证网页功能的正确性。 4.运行测试:将测试脚本运行起来,测试工具会模拟用户的操作来执行测试用例,并对网页进行自动化测试。 5.分析测试结果:对测试结果进行分析和归档,以便及时发现问题并进行修复。 总之,网页自动化测试可以提高测试效率和测试质量,减少手动测试的工作量和人为错误。 ### 回答2: 网页自动化测试是指利用自动化工具和技术对网页进行自动化测试,以验证网页的功能和性能。下面是实现网页自动化测试的步骤: 1. 定义测试用例:根据需求和功能,确定要测试的目标和步骤,并编写测试用例。 2. 选择自动化测试工具:根据需要选择合适的自动化测试工具,如Selenium、Cypress等。 3. 编写测试脚本:使用选择的自动化测试工具,根据测试用例编写测试脚本。测试脚本可以使用多种编程语言来实现,如Java、Python等。 4. 配置测试环境:设置测试环境,包括浏览器版本、操作系统等。 5. 运行测试脚本:执行编写好的测试脚本,进行网页自动化测试。测试脚本会模拟用户在浏览器中的操作,如点击、输入文本等。 6. 验证测试结果:根据预期结果,对比实际结果,判断测试是否通过。如果测试不通过,可以根据日志或错误信息进行问题定位。 7. 输出测试报告:生成测试报告,记录测试的结果、错误和其他指标,以便分析和改进。 8. 执行持续集成:将网页自动化测试集成到持续集成流程中,提高测试效率和质量。可以通过Jenkins等工具实现持续集成。 总结起来,实现网页自动化测试需要明确测试目标、选择合适的自动化测试工具,编写测试脚本,配置测试环境,执行测试脚本,验证测试结果,并生成测试报告。通过持续集成,可以实现自动化测试的自动执行。 ### 回答3: 网页自动化测试是指通过使用自动化工具或脚本,对网页的功能、性能、用户体验等进行自动化测试。实现网页自动化测试主要包括以下几个步骤: 1. 确定测试需求:根据项目需求和功能模块划分,确定需要进行自动化测试的主要功能和场景。 2. 选择自动化测试工具:根据项目的特点和测试需求,选择适合的自动化测试工具。常用的工具包括Selenium、Junit、TestNG等,可以根据项目需求选择合适的工具。 3. 编写测试脚本:根据测试需求和选定的自动化测试工具,编写相应的测试脚本。测试脚本应包含测试用例的输入数据、预期结果以及相关的操作步骤。 4. 配置测试环境:为了有效地进行自动化测试,需要搭建相应的测试环境。包括安装配置自动化测试工具、浏览器驱动等。 5. 执行测试脚本:根据测试需求,执行编写好的测试脚本。可以通过命令行或测试框架来执行脚本,检查测试结果是否与预期一致。 6. 分析测试结果:根据测试执行结果,对错误或异常进行分析和定位。可以通过测试报告、日志等方式来查看测试结果。如果有错误或异常,需要进行修复或重新执行测试。 7. 集成到自动化测试平台:如果项目需要长期的自动化测试,可以将自动化测试脚本集成到自动化测试平台中,实现自动化测试任务的调度、管理和监控。 总结而言,实现网页自动化测试需要明确测试需求、选择合适的自动化测试工具、编写测试脚本、搭建测试环境等。通过执行测试脚本、分析测试结果,并将自动化测试融入到自动化测试平台中,可以提高测试效率和质量,同时节省人力成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值