计时编码:自动化考勤管理

欢迎回到“**:与时间赛跑:!”——这个博客系列将平凡的任务转变为精简、节省时间的奇迹。今天,我很高兴与大家分享一个项目,我将重复的手动工作变成了自动化的强大工具。准备好了解如何节省时间并为您的工作流程增添一丝乐趣了吗?让我们开始吧!

背景故事

你们很多人都知道,我在一家初创公司担任全栈开发人员。我们使用 Keka 来管理员工出勤,这需要在每天进出办公室时手动打卡。问题是什么?有时,我会忘记打卡,导致我的出勤被标记为缺席。这意味着我必须在 Keka 中提交工单来纠正它——这是一项繁琐的任务,我想将其自动化。

问题分解

最初,我为此寻找了 Keka 提供的 API,但不幸的是,他们没有提供。没问题!作为一名开发人员,我接受了自己解决这个问题的挑战。我首先分析了 Keka 的网站,以了解它的工作原理。使用浏览器开发人员工具中的网络选项卡,我确定了上下班打卡时触发的端点。

我编写了一个简单的 Node.js 脚本,使用“fetch”在标头中发出带有 Bearer 令牌的请求,并且成功了。但是,有一个问题:Bearer 令牌每天都会过期。我发现该网站将刷新令牌保留在本地存储中,当旧令牌过期时,该令牌用于获取新的 Bearer 令牌。

在调整我的脚本来处理这个问题之后,我面临更多的挑战:

  • 剧本怎么知道我什么时候进入办公室?
  • 它如何确定何时下班?
  • 我如何才能收到错误通知并能够手动打卡?
  • 解决方案

    为了解决这些问题,我设计了以下解决方案:

  • 上班时间检测:我为脚本配置了具体的上班时间。当到达这些时间时,脚本就会开始尝试打卡上班。
  • 下班时间:我在脚本中设置了一个可配置的持续时间,即打卡上班多少小时后自动下班。
  • 错误通知和手动打卡:我将 Slack 通知集成到脚本中。这样,我就可以收到成功打卡和下班的警报,以及错误警报。
  • [CRON Job (Every 15 minutes)] ---> [Node.js Script]
                             \-------> [Check Time] ---> [Clock In/Out]
                             \-------> [Notify (Slack)]

    一切准备就绪后,我安排了一个 cron 作业每 15 分钟运行一次我的脚本。这个设置运行了一年,非常完美,有效地实现了考勤管理的自动化。

    转换至 Chrome 扩展程序

    一年后,我决定通过将脚本转换为 Chrome 扩展程序来增强解决方案。这使得与同事共享更加容易。扩展程序的工作原理如下:

  • 设置:安装扩展程序后,系统将提示您输入办公室的上下班时间,并指定您想要下班的时间长度。
  • 闹钟机制:扩展程序设置 Chrome 闹钟,每 15 分钟运行一次。当到达打卡时间时,它会使用查询参数 (?CLK_IN=true) 打开 Keka 网站。
  • 内容脚本:扩展程序包含一个内容脚本,用于解析查询参数并触发打卡或下班流程。一旦成功,它会向后台服务发送成功消息,后台服务会记录打卡时间并相应地安排打卡时间。
  • Image description
    [User Setup (Times & Duration)] ---> [Chrome Extension]
                                        |   \--> [Alarm Mechanism]
                                        |   \--> [Content Script]
                                        \--> [Keka Website]

    这种简化的方法使我的出勤管理变得更加容易!

    **注意:**如果您对源代码感兴趣,请随时联系我!

    轮到你了!

    您是否曾使用代码自动执行过任务?在下面的评论中分享您的经验和技巧!您希望可以自动执行哪些任务?让我们讨论一下!

    感谢您与我一起踏上自动化之旅。别忘了订阅我的博客以获取更多提示和更新。祝您编码愉快!