[Python]上班自動打卡
由於公司最近開始取消實體感應扣打卡而改成以電腦網頁登入打卡,雖然說這樣就不需要擔心感應扣不見或是忘記帶,但缺點就是電腦開機太慢或是下雨的時候還在辦公室外面整理雨衣導致可能會遲到幾秒鐘……,有鑑於此決定用Python
寫一個設定時間就能自動打卡的程式,因為自己完全沒有基礎……所以全部參考網路上的分享來土炮編寫。
x
1from os import listdir
2from os.path import isfile, isdir, join
3import os
4import sys
5import time
6import datetime
7import random
8import re
9import smtplib, ssl
10from selenium import webdriver
11from selenium.webdriver.common.by import By
12from selenium.webdriver.common.action_chains import ActionChains
13from selenium.webdriver.support import expected_conditions
14from selenium.webdriver.support.wait import WebDriverWait
15from selenium.webdriver.common.keys import Keys
16from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
17
18
19#循環次數
20t2 = 2880
21#間距秒數
22t3 = 30
23'''
24以資料夾名稱來判斷時間,會這樣設定是因為雲端空間在手機端操作比較方便,省去打開文件
25編輯什麼的,也可達到遠端操作
26'''
27mypath = "D:\Google雲端硬碟\sync\上班打卡用"
28
29#用正規式判斷有無資料夾,及資料夾格式是否為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 break
41 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)
55
56#判斷時間
57d_time = datetime.datetime.strptime(str(datetime.datetime.now().date())+c_time3, '%Y-%m-%d%H:%M')
58n_time = datetime.datetime.now()
59
60if n_time <= d_time:
61 deltatime = (d_time - n_time).seconds -120
62 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()
70
71#打卡動作
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()
83
84## 關閉瀏覽器
85time.sleep(10)
86driver.quit()
87#刪除資料夾
88os.rmdir(mypath+"\\"+c_time0)
89
90#打卡成功通知,採用Gmail設定
91port = 465 # For SSL
92smtp_server = "smtp.gmail.com"
93sender_email = "寄信者信箱" # Enter your address
94receiver_email = "收信者信箱" # Enter receiver address
95password = "密碼"
96message = """\
97Subject:check in to work
98
99It's worked"""
100
101context = 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)
105
106#關閉程式
107sys.exit()