Python實現企業微信自動打卡程式二:跳過節假日,隨機打卡時間,定時任務,失敗通知

Python魔法师發表於2024-03-11

一、介紹

在上節 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

相關文章