欢迎回到“:与时间赛跑的代码:!” – 在这个博客系列中,我将平凡的任务转化为简化、节省时间的奇迹。今天,我很高兴与大家分享一个项目,在这个项目中,我将重复的手动工作变成了自动化的动力室。准备好了解如何节省时间并为您的工作流程增添一丝兴奋了吗?让我们开始吧!
背景故事
正如你们很多人所知,我在一家初创公司担任全栈开发人员。我们使用keka来管理员工考勤,每天进出办公室时需要手动打卡。问题是什么?有时,我忘记打卡上班或下班,这导致我的出勤被标记为缺席。这意味着我必须在 keka 中提交罚单来纠正它——这是一项我想自动化的繁琐任务。
问题分解
最初,我为此目的寻找 keka 提供的 api,但不幸的是,他们没有提供。没问题!作为一名开发人员,我接受了自己解决这个问题的挑战。我首先分析 keka 的网站来了解它是如何运作的。使用浏览器开发人员工具中的网络选项卡,我识别了打卡上下班时触发的端点。
我编写了一个简单的 node.JS 脚本,使用 fetch 来发出带有不记名令牌的请求,并且它有效。然而,有一个问题:不记名令牌每天都会过期。我发现该网站在本地存储中保留了刷新令牌,用于在旧令牌过期时获取新的承载令牌。
在调整我的脚本来处理这个问题后,我面临着更多挑战:
- 脚本如何知道我何时进入办公室?
- 它如何确定何时下班?
- 如果出现任何错误,我如何收到通知并能够手动打卡?
解决方案
为了解决这些问题,我设计了以下解决方案:
- 办公室进入检测:我为脚本配置了特定的办公时间。然后,当到达这些时间时,脚本将开始尝试打卡。
- 打卡下班时间:我在脚本中设置了一个可配置的持续时间,规定打卡后多少小时应自动下班。
- 错误通知和手动打卡:我将 slack 通知集成到脚本中。这样,我就会收到成功打卡和下班以及错误的警报。
[cron job (every 15 minutes)] ---> [node.js script] -------> [check time] ---> [clock in/out] -------> [notify (slack)]
一切就绪后,我安排了一个 cron 作业,每 15 分钟运行一次我的脚本。这个设置完美运行了一年,有效地实现了我的考勤管理自动化。
过渡到 chrome 扩展程序
一年后,我决定通过将脚本转换为 chrome 扩展来增强解决方案。这使得与同事分享变得更加容易。该扩展程序的工作原理如下:
- 设置:安装扩展程序后,系统会提示您输入办公室的进出时间,并指定您想要下班的持续时间。
- 闹钟机制: 该扩展程序将 chrome 闹钟设置为每 15 分钟运行一次。当到达打卡时间时,它会打开 keka 网站,并带有查询参数 (?clk_in=true)。
- 内容脚本: 该扩展包含一个内容脚本,用于解析查询参数并触发上班或下班流程。成功后,会向后台服务发送成功消息,后台服务会记录签到时间并相应安排签退时间。
[User Setup (Times & Duration)] ---> [Chrome Extension] | --> [Alarm Mechanism] | --> [Content Script] --> [Keka Website]
这种简化的方法使管理我的出勤变得更加容易!
注意:如果您对源代码感兴趣,请随时联系我!
轮到你了!
您是否曾经使用代码自动化执行任务?在下面的评论中分享您的经验和技巧!您希望哪些任务能够自动化?我们来讨论一下吧!
感谢您加入我的自动化之旅。不要忘记订阅我的博客以获取更多提示和更新。快乐编码!