一、介紹
在上節 Python實現企業微信上下班自動打卡程式內容之後,我們繼續最佳化自動打卡程式。接下來增加如下內容:
- 實現打卡時間隨機範圍
- 處理節假日不打卡的情況
- 實現定時排程打卡
- 打卡成功或失敗通知自己
二、實現打卡時間隨機範圍
既然我們程式寫完後需要定時執行,那定時執行打卡就會導致每次上班或下班打卡時都是同一時間,這並不好
,為了避免被發現,每次打卡時間都是同一時間,這裡我們最佳化程式,增加隨機等待時間來實現。例如每次點選打卡時,隨機等待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()} : 下班打卡成功")
三、處理節假日不打卡的情況
為了避免節假日誤操作打卡情況,這裡我們需要過濾節假日無需打卡情況。
處理方式如下:
- (推薦)簡單版本:直接根據星期來判斷,週一至週五打卡,週末不打卡
- 網上尋找每年節假日相關公開介面
這裡我們推薦直接根據星期來判斷,因為大多數情況下網上的節假日介面不太穩定(這樣會導致我們誤打卡),我們的目標是實現真正的和人工打卡一樣的操作。
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():
判斷
四、實現定時排程打卡
到這裡我們已經編寫好了一個初版的自動打卡程式,接下來上排程。配置排程有幾種方式:
- 使用Python相關排程庫,例如
falsk-scheduler
或django-scheduler
- windows裡編寫bat檔案,然後在系統設定定時任務
- 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加班的同志,可以配置時間更晚一點
)
五、打卡成功或失敗通知自己
看到這裡,你以為完美了嗎?並不是,是程式就總會出錯,如果某天程式打卡失敗,就會導致我們漏打卡,輕則補卡,重則扣錢
為了實現打卡失敗時及時通知自己,然後手工打卡的情況,我們需要做一個通知功能。
這裡有如下幾種解決方案:
透過第三方免費介面,例如Server醬(不知道免費額度能用多久)來實現推送訊息到個人微信上
透過收費介面,實現電話通知,例如XX雲上有很多這樣的產品
給自己企業微信裡的自己發一條訊息來提醒
透過企微機器人webHook形式傳送訊息
如果各位大佬有更好的服務推送訊息到個人微信的方案,歡迎溝通
這裡先採用第3種方案,透過adb開啟企業微信,然後給自己發一條訊息提醒,給大家留個作業。
思考:如何使用uiautoamtor2或adb命令實現開啟企業微信,找到自己,並給自己傳送一條訊息?
總結
透過以上程式碼,我們基本實現了企微上下班自動打卡的全部流程,本次程式碼只做學習交流使用~
各位看官,如對你有幫助歡迎點贊,收藏,轉發。
如需要原始碼請關注公眾號【Python魔法師】,後臺回覆“
企微打卡
”即可獲取原始碼原始碼和文件。