Python实现企业微信自动打卡程序二:跳过节假日,随机打卡时间,定时任务,失败通知

news/2024/4/29 5:16:08

实现打卡时间随机范围

既然我们程序写完后需要定时执行,那定时执行打卡就会导致每次上班或下班打卡时都是同一时间,这并不好,为了避免被发现,每次打卡时间都是同一时间,这里我们优化程序,增加随机等待时间来实现。例如每次点击打卡时,随机等待5-10分钟。

if 8 < datetime.now().hour < 9:if d(text=u"你已在打卡范围内").info['text'] == "你已在打卡范围内":print("现在是上午")TimeUtil.random_sleep(random_start=300, random_end=600)  # 随机等待5-10分钟,再进行打卡,防止每次打卡都是同一时间d(text=u"上班打卡").click()time.sleep(3)print(f"{TimeUtil.curr_date()} : 上班打卡界面成功")

这里我们增加了random_sleep函数来处理随机等待时间,下班也是同样逻辑。

if 18 < datetime.now().hour < 19:if d(text=u"你已在打卡范围内").info['text'] == "你已在打卡范围内":print("现在是下午")TimeUtil.random_sleep(random_start=300, random_end=600)  # 随机等待5-10分钟,再进行打卡,防止每次打卡都是同一时间d(text=u"下班打卡").click()time.sleep(3)print(f"{TimeUtil.curr_date()} : 下班打卡成功")

处理节假日不打卡的情况

为了避免节假日误操作打卡情况,这里我们需要过滤节假日无需打卡情况。

处理方式如下:

  1. (推荐)简单版本:直接根据星期来判断,周一至周五打卡,周末不打卡

  2. 网上寻找每年节假日相关公开接口

这里我们推荐直接根据星期来判断,因为大多数情况下网上的节假日接口不太稳定(这样会导致我们误打卡),我们的目标是实现真正的和人工打卡一样的操作。

if 8 < datetime.now().hour < 9:if d(text=u"你已在打卡范围内").info['text'] == "你已在打卡范围内":print("现在是上午")TimeUtil.random_sleep(random_start=300, random_end=600)  # 随机等待5-10分钟,再进行打卡,防止每次打卡都是同一时间if TimeUtil.is_work_day():  # 如果是工作日,则打卡d(text=u"上班打卡").click()time.sleep(3)print(f"{TimeUtil.curr_date()} : 上班打卡界面成功")

主要代码是增加if TimeUtil.is_work_day():判断

实现定时调度打卡

到这里我们已经编写好了一个初版的自动打卡程序,接下来上调度。配置调度有几种方式:

  1. 使用Python相关调度库,例如falsk-schedulerdjango-scheduler

  2. windows里编写bat文件,然后在系统设置定时任务

  3. Linux可使用crontab配置定时任务

这里我们为了方便演示,直接使用windows的计划任务来配置定时

新建任务

在任务计划程序中,右键点击【任务计划程序库】-【新建任务】

新建定时任务.png

注意:需要勾选【不管用户是否登录都要运行】

任务触发器配置

点击【触发器】,选择【每天】

触发器配置.png

任务操作配置

点击【操作】-【新建】-【浏览】

选择我们编写的bat文件

操作配置.png

start.bat文件代码示例:

@echo onrem 激活虚拟环境
call C:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\activate.batrem 运行 punch_card.py
python punch_card.py

最后保存即可实现任务按计划每天执行

注意,我们是上班+下班打卡执行程序,为了不受影响,建议分别配置2个定时任务

  • 上班:配置从每天8:30开始执行程序

  • 下班:配置从每天18:30开始执行程序(想XX加班的同志,可以配置时间更晚一点

打卡成功或失败通知自己

看到这里,你以为完美了吗?并不是,是程序就总会出错,如果某天程序打卡失败,就会导致我们漏打卡,轻则补卡,重则扣钱为了实现打卡失败时及时通知自己,然后手工打卡的情况,我们需要做一个通知功能。

这里有如下几种解决方案:

  1. 通过第三方免费接口,例如Server酱(不知道免费额度能用多久)来实现推送消息到个人微信上

  2. 通过收费接口,实现电话通知,例如XX云上有很多这样的产品

  3. 给自己企业微信里的自己发一条消息来提醒

  4. 通过企微机器人webHook形式发送消息

如果各位大佬有更好的服务推送消息到个人微信的方案,欢迎沟通

这里先采用第3种方案,通过adb打开企业微信,然后给自己发一条消息提醒,给大家留个作业。

思考:如何使用uiautoamtor2或adb命令实现打开企业微信,找到自己,并给自己发送一条消息?

总结

通过以上代码,我们基本实现了企微上下班自动打卡的全部流程,本次代码只做学习交流使用~

文章转载自:Python魔法师

原文链接:https://www.cnblogs.com/meet/p/18066697

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10448.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

2024.3.12

1.枚举练习题 代码&#xff1a; #include<myhead.h>typedef enum {LED_1,LED_2,LED_3 }A;typedef enum {LED_ON,LED_OFF }B;void inti(A a1) {switch(a1){case LED_1:printf("初始化LED_1\n");break;case LED_2:printf("初始化LED_2\n");break;case…

ubuntu20.04上获取Livox Avia雷达点云数据

若拿到手的Livox Avia激光雷达不知道它的ip信息&#xff0c;可以在官网上LiDAR Sensors - Livox下载上位机软件Livox Viewer&#xff0c;查看IP&#xff0c;下载window版本就可以。雷达通过网线连上电脑后&#xff0c;该软件就可以自动识别出来。按照下图步骤&#xff0c;就可以…

Docker部署系列之Docker Compose安装Redis三主三从集群

在日常开发或者编程当中&#xff0c;经常需要用到redis集群&#xff0c;若是按照传统的方式&#xff0c;一个机器一个机器搭建&#xff0c;难免过于繁琐&#xff0c;故而可以通过dock er-compose编排方式&#xff0c;快速搭建。我在搭建过程当中&#xff0c;将操作记录下来&…

Codeforces Round 933 (Div. 3) --- G. Rudolf and Subway --- 题解

G. Rudolf and Subway&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 这道题很容易看出是一个最短路的图论问题&#xff0c;但是Java普通最短路常数有点高会被卡。 因为他是地铁线路&#xff0c;线路一定是一直连着的&#xff0c;不会中间断开&#xff0c;那我们可以…

漏洞复现-蓝凌LandrayOA系列

蓝凌OA系列 蓝凌poc-yaml-landray-oa-rcepoc-yaml-landray-oa-custom-jsp-filereadlandray-uploadzhihuidiaodupingtai-upload-file-uploadlandray-sysZonePersonInfo-info-leaklandrayoa-2022-rcelandray-login-bypasslandray-login-bypass-rcelandray-getLoginSessionId-logi…

Excel F4键的作用

目录 一. 单元格相对/绝对引用转换二. 重复上一步操作 一. 单元格相对/绝对引用转换 ⏹ 使用F4键 如下图所示&#xff0c;B1单元格引用了A1单元格的内容。此时是使用相对引用&#xff0c;可以按下键盘上的F4键进行相对引用和绝对引用的转换。 二. 重复上一步操作 ⏹添加或删除…