[Python]上班自動打卡
由於公司最近開始取消實體感應扣打卡而改成以電腦網頁登入打卡,雖然說這樣就不需要擔心感應扣不見或是忘記帶,但缺點就是電腦開機太慢或是下雨的時候還在辦公室外面整理雨衣導致可能會遲到幾秒鐘……,有鑑於此決定用Python寫一個設定時間就能自動打卡的程式,因為自己完全沒有基礎……所以全部參考網路上的分享來土炮編寫。
x
1from os import listdir2from os.path import isfile, isdir, join3import os4import sys5import time6import datetime7import random8import re9import smtplib, ssl10from selenium import webdriver11from selenium.webdriver.common.by import By12from selenium.webdriver.common.action_chains import ActionChains13from selenium.webdriver.support import expected_conditions14from selenium.webdriver.support.wait import WebDriverWait15from selenium.webdriver.common.keys import Keys16from selenium.webdriver.common.desired_capabilities import DesiredCapabilities171819#循環次數20t2 = 288021#間距秒數22t3 = 3023'''24以資料夾名稱來判斷時間,會這樣設定是因為雲端空間在手機端操作比較方便,省去打開文件25編輯什麼的,也可達到遠端操作26'''27mypath = "D:\Google雲端硬碟\sync\上班打卡用"2829#用正規式判斷有無資料夾,及資料夾格式是否為4個數字集合30##循環2880次,每次30秒31for i in range(0,t2,1):32 files = listdir(mypath)33 if len(files): #判斷list不是空集合34 c_time0 = files[0]35 c_time1 = re.findall('\d{4}',c_time0) #變成list,所以要重新設定變成字串36 if c_time1: #判斷字串是不是4個數字連在一起37 c_time2 = re.split("",c_time1[0])38 c_time3 = c_time2[1]+c_time2[2]+":"+c_time2[3]+c_time2[4]39 #print(c_time3)40 break41 else:42 print('錯誤時間格式,繼續等待')43 for tt in range(t3,0,-1):44 print(tt)45 time.sleep(1)46 print("迴圈數",i,"/",t2)47 os.rmdir(mypath+"\\"+c_time0)48 else:49 n_time = datetime.datetime.now()50 print("找不到時間,等待30S重新判斷")51 for tt in range(t3,0,-1):52 print(tt)53 time.sleep(1)54 print("迴圈數",i,"/",t2)5556#判斷時間57d_time = datetime.datetime.strptime(str(datetime.datetime.now().date())+c_time3, '%Y-%m-%d%H:%M')58n_time = datetime.datetime.now()5960if n_time <= d_time:61 deltatime = (d_time - n_time).seconds -12062 print("打卡倒數時間=",str(datetime.timedelta(seconds=deltatime)),"≒",deltatime,"秒")63 for x in range(deltatime,0,-1):64 print("剩下:",x,"秒")65 time.sleep(1)66else:67 print("打卡時間小於目前時間,不符合邏輯,程式10秒後自動關閉")68 time.sleep(10)69 sys.exit()7071#打卡動作72'''73利用firefox的selenuim記錄,最方便,但是程式碼需要修正才行74by_id(xxx)這部分錄製的程式碼不符合python3,需要手動修正75'''76driver = webdriver.Firefox()77rantime = random.randint(6,60)78driver.get("__公司網址__")79driver.find_element_by_id("txtUser10").send_keys("__帳號__")80driver.find_element_by_id("txtPwd10").send_keys("__密碼__")81time.sleep(rantime)82driver.find_element_by_id("btnCheckIn10").click()8384## 關閉瀏覽器85time.sleep(10)86driver.quit()87#刪除資料夾88os.rmdir(mypath+"\\"+c_time0)8990#打卡成功通知,採用Gmail設定91port = 465 # For SSL92smtp_server = "smtp.gmail.com"93sender_email = "寄信者信箱" # Enter your address94receiver_email = "收信者信箱" # Enter receiver address95password = "密碼"96message = """\97Subject:check in to work 9899It's worked"""100101context = ssl.create_default_context()102with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:103 server.login(sender_email, password)104 server.sendmail(sender_email, receiver_email, message)105106#關閉程式107sys.exit()