ブラウザの勤怠管理システムで自動打刻する方法
こんにちは
みなさんは勤怠管理どうされてますか?
パソコンで打刻の方もいれば、紙でされてる方もいるかもしれません。
私は出勤ギリギリな人なのですが、打刻をするのがとても面倒くさいです。
会社のシステムはIE上でおこなうものなのですが、ログインから始まり何回もボタンを押す必要がある(階層が深い)状態です。
そんなことで今日はPythonを使用しての自動打刻システムを作成してみました。ChromeやFireFoxなら比較的やりやすそうですがIEは苦労しました・・・
ということで、こんな感じでできるかもという紹介をします。
1.今の打刻システム
いま使ってる打刻システム(某A社製)をざっくりいうとこんな感じです。
①ID、Passを入れてログイン
②打刻画面まで2回ボタンを押す
③打刻画面開くので始業or終業をクリック
けっこう似たような構成かと思います。
2.準備
import tkinter as tk
from selenium import webdriver
import time
import pyautogui
from pynput import mouse
この辺りをインストールしてください。
合わせてIEドライバーが必要なので"IEDriverServer.exe"を落としてください。
3.コードの流れ
はじめGoogle先生やGitHub先生に聞いたところ、
『"find_element_by_id"使えば余裕やで!』と仰るのですが全然動かず…
A社の勤怠システムがJavaスクリプトということと、IEの制限がいろいろあるっぽくて動きませんでした(自分の技量をIEのせいにするスタイル)
ということで、以下の方針で行きます。
・各ボタンや入力は力技
・ID、Passはpyautoguiで直打ち
・各ボタンは座標を調べて、指定座標をクリックさせる
・ソフトには始業、終業ボタンを設ける
4.勤怠システムを開く~ログインまで
#勤怠システムを開く
driver = webdriver.Ie(r"IEDriverServer.exeの直リンク")
driver.get('勤怠システムのアドレス')
#カレントウインドウを最大化する
driver.maximize_window()
time.sleep(1)
# ログイン用コマンド
pyautogui.typewrite('ID')
time.sleep(0.5)
pyautogui.press('tab')
time.sleep(0.5)
pyautogui.typewrite('パスワード')
pyautogui.press('tab', presses=3, interval=0.3)
time.sleep(0.5)
pyautogui.press('enter')
time.sleep(5)
わかりますかこの力技???
pyautoguiを使うとキーボードを打つことができますので、文字だけでなくtabやenterも自在です。
5.座標取得~クリック
ログインまでは力技でどうにかなったのですが、ログイン後はJavaスクリプトの関係でpressコマンドが使えませんでした。そのため座標を取得してクリックしていきます。
#座標取得コマンド #
class Monitor:
def on_click(self, x, y, button, pressed):
print('{0} at {1}'.format('Pressed' if pressed else 'Released',(x,y)))
def start(self):
with mouse.Listener(on_click=self.on_click) as self.listener:
self.listener.join()
monitor = Monitor()
monitor.start()
これ使うと押したとき、離したときの座標がわかります。
あとは求めた座標から、
pyautogui.click(700,800) #始業ボタン
でボタンを押せば終了です。
6.アプリ作成
あとは下記のように簡単に始業打刻ボタンを設定すれば完了です。
# ウィンドウを作成
win = tk.Tk()
win.title("打刻アプリ")
win.geometry("400x200")
# ボタンを作成
StampButton = tk.Button(win, text=u'始業打刻')
StampButton["command"] = TimeCard
StampButton.pack()
labelResult = tk.Label(win, text=u'--------------')
labelResult.pack()
StampButton2 = tk.Button(win, text=u'終業打刻')
StampButton2["command"] = TimeCard2
StampButton2.pack()
# ウィンドウを動かす
win.mainloop()
私はこれでウォーターサーバーに水を取りに行く時間を確保できました。
よろしければご活用ください。
それでは
この記事が気に入ったらサポートをしてみませんか?