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

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

时间:2024-03-11 18:14:02浏览次数:26  
标签:Python 微信 random TimeUtil sleep text 打卡 定时

一、介绍

在上节 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的计划任务来配置定时

新建任务

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

新建定时任务.png

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

任务触发器配置

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

触发器配置.png

任务操作配置

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

选择我们编写的bat文件

操作配置.png

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魔法师】,后台回复“企微打卡”即可获取源码源码和文档。

qrcode.jpg

标签:Python,微信,random,TimeUtil,sleep,text,打卡,定时
From: https://www.cnblogs.com/meet/p/18066697

相关文章

  • Logstash接收udp/tcp数据 python+ udp/tcp +logstash +elasticsearch
    Logstash接收udp/tcp数据背景:在 Logstash数据源为日志文件操作 基础上进行一、配置文件1.D:\usr\local\etc\logstash\pipeline1目录下logstash.conf文件配置input{stdin{}udp{host=>"0.0.0.0"#从5000端口获取日志port=>5000......
  • C# 启动 Python 不能及时获取输出信息
    结论:在print函数前加上sys.stdout.flush()。有的说加载print之后,都可以试试。fromtimeimportsleepimportsysif__name__=="__main__":sys.stdout.flush()print("Start")foriinrange(10000):#sys.stdout.write(str(i))sys.stdo......
  • python的一些设置
    一1全局设置pip加速。查找pip.ini文件,添加以下代码[global]index-url=http://pypi.tuna.tsinghua.edu.cn/simple/[install]trusted-host=pypi.tuna.tsinghua.edu.cn2执行poetryinstall命令单个项目:pyproject.toml文件加入以下内容可以加速[[tool.poetry.sourc......
  • Python - PyCharm支持的4种Python Interpreter和配置方法
    原文地址https://blog.csdn.net/qq_41498261/article/details/109112331 1.VirtualenvEnvironment1.1VirtualenvEnvironment是什么?1.2如何使用VirtualenvEnvironment?1.2.1.Newenvironment1.2.2.Existingenvironment2.CondaEnvironment2.1CondaEnvironment是什么......
  • python 有关于四舍五入,四舍六入的内容
    一、简介二、内容三、问题 一、简介最近看书看到了,有关python 内置的函数round取小数点的问题。书上描述的是四舍五入,然后又说,‘四舍五入’只是个约定的说法,并非所有的.5都会被进位。然后我再上网查了下,才知道,之前使用的四舍五入后面,还有个四舍六入五成双......
  • linux 通过python 命令定时删除文件,不通过crontab
    importosimporttimelog_dir="/var/log/"defdelete_expired_logs():current_time=time.localtime()print(current_time.tm_hour)ifcurrent_time.tm_hour==12andcurrent_time.tm_min==30:print('xxxxxxxxxx')......
  • python json格式转url参数&分割, url参数转json格式
    前言全局说明一、json格式转url参数&分割>>>fromurllib.parseimporturlencode>>>params={'user':'admin','pwd':'123456'}>>>print(urlencode(params))二、url参数转json格式>>>importj......
  • [oeasy]python0010_怎么用命令行保存文件
    编写py文件......
  • Pycharm:terminal中python不是内部或外部命令
    问题在外部cmd中,可以正常使用python进入编辑模式。但是在pycharm的terminal中,使用python却报错:python不是内部或外部命令。原因未知,猜测是Pycharm的terminal无法正确读取环境变量,导致只能读取本目录下命令。解决方案File→Settings→Tools→Terminal把Startdirectory改为......
  • 绕过网页微信客户端限制
    目标网站https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3df73e654426c64c&redirect_uri=https%3A%2F%2Fwww.vyeah.com.cn%2FMember%2FIndex%3Fcompany%3Dvyeah&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#we......