一、介绍

在上节 Python实现企业微信上下班自动打卡程序内容之后,我们继续优化自动打卡程序。接下来增加如下内容:

  1. 实现打卡时间随机范围
  2. 处理节假日不打卡的情况
  3. 实现定时调度打卡
  4. 打卡成功或失败通知自己

二、实现打卡时间随机范围

既然我们程序写完后需要定时执行,那定时执行打卡就会导致每次上班或下班打卡时都是同一时间,这并不好,为了避免被发现,每次打卡时间都是同一时间,这里我们优化程序,增加随机等待时间来实现。例如每次点击打卡时,随机等待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的计划任务来配置定时

新建任务

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

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

任务触发器配置

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

任务操作配置

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

选择我们编写的bat文件

start.bat文件代码示例:

@echo on

rem 激活虚拟环境
call C:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\activate.bat rem 运行 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魔法师】,后台回复“企微打卡”即可获取源码源码和文档。

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

  1. Zabbix4.2.0使用Python连接企业微信报警

    目录 1. 配置企业微信 2. 脚本配置 2.1 安装python依赖的库 2.2 编写脚本 2. 搭建FTP 3. 配置Zabbix监控FTP 3.1 添加FTP模板 3.2 添加报警媒介 3.3 ...

  2. 使用Python发送企业微信消息

    准备工作: 到企业微信官网,注册一个企业:登录企业微信后台,创建一个“自建”应用, 获取企业ID.agentid.secret这3个必要的参数:在企业微信的通讯录中,创建多个测试账号:在手机端安装“企 ...

  3. Python 发送企业微信消息

    1.获取企业微信信息 1)我的企业 --> 企业信息 --> 企业ID 2)创建一个应用,记录该应用的 AgentId.Secret 2.python代码 #!/usr/bin/env p ...

  4. Python接入企业微信 - 推送信息到内部群里

    前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现. 本 ...

  5. Python 调用让系统自动调用默认程序打开文件?

    windows上可以使用os.startfile os.startfile(file) linux上可以使用xdg-open subprocess.call(["xdg-open" ...

  6. TT企业微信社群辅助,企业微信社群辅助工具,允许批量添加好友,自动同意添加请求,自动回复消息

    TT企业微信社群辅助,企业微信社群辅助工具,允许批量添加好友,自动同意添加请求,自动回复消息 界面截图 TT企业微信社群辅助工具下载 链接: https://pan.baidu.com/s/1Y2An ...

  7. 企业微信的corpsecret在哪里?

      问题: 查看“企业微信”的官方开发文档,在“获取access_token”部分提到,使用GET请求方法,访问 https://qyapi.weixin.qq.com/cgi-bin/gettoke ...

  8. 拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 最近接个任务,用webhook做了个代码提交监听功能,就是有人 ...

  9. Python3调用企业微信用于告警

    前段时间利用py爬虫抓取一些网页信息,然后通过wxpy发送到微信群,以用作日常告警,感觉还是很方便. 但好景不长,我的小号微信被腾讯封了(很常见咯), 显示无法登录网页版微信,至今已经有半个多月了. ...

  10. 团队内部密码共享方案:KeePassXC+微盘(企业微信)

    目录 需求描述 适用场景 安装使用 KeePassXC初始化 浏览器插件安装设置 1.火狐 2.Edge 3.Chrome 软件-插件的链接 登陆网站并保存密码 (企业微信)微盘共享内部数据库 其他 ...

随机推荐

  1. dwm 美化

    在之前的博客中,我们将arch linux这个系统进行了一些美化,当然也是仅仅做到能看这个地步,要说跟网上其他那些惊艳的特效对比,肯定是不如的.但是我一直秉持一个观点,美化应该适可而止,只要不是丑的你 ...

  2. yum 安装失败解决思路$releasever(curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error")

    问题 公司使用刀片机的系统版本是CentOS 7.9.2009(Core),本人在重新安装虚拟机时,也使用对应的系统版本,在安装软件时,yum无法正常使用,一开始觉得,centos的release版本 ...

  3. 使用docker部署一个go应用

    使用docker部署一个go应用 前言 直接部署 构建镜像 创建并运行容器 使用docker-compose部署 上传到docker-hub,然后拉取镜像,部署 参考 使用docker部署一个go应用 ...

  4. 金融时间序列预测方法合集:CNN、LSTM、随机森林、ARMA预测股票价格(适用于时序问题)、相似度计算、各类评判指标绘图(数学建模科研适用)

    金融时间序列预测方法合集:CNN.LSTM.随机森林.ARMA预测股票价格(适用于时序问题).相似度计算.各类评判指标绘图(数学建模科研适用) 1.使用CNN模型预测未来一天的股价涨跌-CNN(卷积神 ...

  5. 深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

    深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别.实体.关系.属性抽取实战项目合集(含智能标注) 1.命名实体识别介绍 命名实体识别(Named Entity R ...

  6. python3 ACM模式的输入输出例子教学

    Python的输入是字符串,所以要自己转类型 strip去掉左右两端的空白符,返回str slipt把字符串按空白符拆开,返回[str] map把list里面的值映射到指定类型,返回[type] EO ...

  7. Windows Server ISO原版镜像文件下载(2023年04月)

    Windows Server 2022 (updated April 2023) (x64) - DVD (Chinese-Simplified) 链接:https://pan.baidu.com/s ...

  8. MySQL执行函数时报错:Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation 'find_in_set'

    执行函数时报错: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) f ...

  9. 开源.NetCore通用工具库Xmtool使用连载 - 发送邮件篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的随机值类库,今天我们继续为大家介绍其中的邮件发送类库. 发送邮件是系统开发中经常需要的功能,广泛应用于消息通知.异常告警.内容 ...

  10. 2023年多校联训NOIP层测试2

    2023年多校联训NOIP层测试2 爆零了 T1 HDU 4786 Fibonacci Tree \(0pts\) @wangyunbiao: 不可以,总司令 我:不,可以,总司令 @wangyunb ...