Seleniumを使って(半)自動的に出退勤する


はじめに

会社で利用している打刻システムが少し煩雑だったので自動で打刻するシステムをseleniumを利用して実装した。seleniumの使い方含めて解説していきたい。

社内でもブラウザ操作自動化がホットな話題だったのでその技術のキャッチアップにもなると考え、また一旦こういう技術を覚えてしまえば自動化脳になれるとも考えた。
要は具体的な方法を一度知ってしまえば、あれもこれも自動化してしまえという思考回路が生まれると考えた。技術の世界では本当にこれが大事だと思う。。。

打刻システム

1 . ブラウザを立ち上げ、office365にログイン
2 . ログイン情報でOAuth連携?して打刻システムにログイン
3 . 打刻システムで数クリックして打刻完了

自分はしょっちゅうブラウザのcookieを消すため、2のログイン時にメールアドレスやパスワードを都度入れるのがかなり手間なので自動的に打刻ボタンを押したい

また、昨今のコロナ状況により、リモートワークの開始・終了連絡のメール送信も自動化したい。メールはoutlookだが、web版もあるのでseleniumで操作できるはず!

ところでseleniumとは

簡単に説明するとブラウザの操作を自動化することができるツール。
webdriverというものからブラウザを起動、操作をおこなう。自動操作モードになるので実際のブラウザ操作と全く同じ挙動(cookieの扱い等)をするかは不明。

ブラウザ操作は提供されているAPIを利用することにより、操作したいウインドウやサイト内の要素を取得し、そこに対して「ボタンを押す」や「書き込む」などの操作をこれまたAPIで実行させる。
各種APIコマンドこちら

なので、動かすまでのおおまかな流れとしては
1 . 利用したい言語をインストール(pythonとかjavaとか)
2 . seleniumをインストール
3 . 利用したいブラウザに対応したwebdriverインストール
4 . プログラム作成
5 . 実行

となる。
詳細はこちらがわかりやすかった。

これをpythonにて利用し、打刻システムで出勤・退勤ボタンを押すところまでは実装できた。

outlookで自動メール送信!

僕「すみません、なんかweb版のoutlookつながらないんですけど・・・」

ヘルプデスクさん「私用端末からもアクセスできる機能のため禁止となっております」

僕「ぴえん」

ということで「python outlook 自動化」で検索したところ案外簡単に実装できた。上で作成した打刻システムのpythonコードに下記を追加して完成。詳細はコメント参照。

sendMail.py
# -*- coding: SJIS -*-
#↑日本語利用する場合はSJISで文字コードセット

#outlookを操作するためのwin32com.client
import win32com.client

#オブジェクト作成
outlook = win32com.client.Dispatch("Outlook.Application")

#オブジェクト登録
mail = outlook.CreateItem(0)

mail.to = '[email protected]' #宛先
mail.cc = '[email protected]' #cc
mail.bcc = '[email protected]' #bcc
mail.subject = '勤怠連絡' #件名
mail.bodyFormat = 3 #メール書式 1:テキスト 2:HTML 3:リッチテキスト
mail.body = '''おはようございます。

リモートワーク開始します。

Qiita-test
'''

mail.Send() #メール送信

終わりに

これで出勤時、退勤時の貴重な1,2分が確保できた。
定期実行にしてしまうと、
「あれ、あいつ今日休みなのに出勤メール送ってね?」
「退勤メール送った後に仕事してるやん」
ということになりかねない
ので一旦作成したpythonは出退勤時に手動実行、なので半自動化(笑)。
PC起動時や何かしらトリガーを設定できたらなぁと思いつつあまり良い考えが浮かばない。。。。

seleniumでできることやできないこと、他のツールでできることなどが少しわかったので自動化作業をするときの大きな助けになりそう^^