ブラウザの勤怠管理システムで自動打刻する方法

こんにちは

みなさんは勤怠管理どうされてますか?
パソコンで打刻の方もいれば、紙でされてる方もいるかもしれません。

私は出勤ギリギリな人なのですが、打刻をするのがとても面倒くさいです。
会社のシステムは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()

私はこれでウォーターサーバーに水を取りに行く時間を確保できました。
よろしければご活用ください。

それでは

この記事が気に入ったらサポートをしてみませんか?