
Web打刻の半自動化 by Window10
今年から出退勤をWeb打刻で管理することになったため、python+chromedriver+seleniumを用いてWeb打刻の半自動化を試しました。ブックマークで目的ウェブサイトに移動しボタンを押せばいいだけなのですが、ブラウザの制御に興味があったので今回いろいろ試行錯誤しました。自分の覚書ですが、他の方にも参考になることがあるかもしれません。
事前準備
Pythonのインストール
公式サイトから最新版インストーラーをダウンロードしインストールします。インストールのとき "Add Python Ver.# to PATH" のチェックを忘れないようにしましょう。
Pythonが正常にインストールされているかを確認するには、コマンドプロンプトで python --version を入力し最新バージョンが表示されれば成功です。
C:\Users\hogehoge>python --version
Python 3.10.1
Google Chromeのインストール
公式サイトからインストールします。後でインストールするChromeDriverがWindows版は32ビット版のみなので、Chromeも32ビット版をインストールする。インストール後、Chromeを起動しバージョンを確認します。確認方法はこちらです。

ChromeDriverのインストール
公式サイトからGoogle Chromeと同じバージョン(最後の2桁(もしくは3桁)の数字は同じでなくても大丈夫)を選択しzipファイルをダウンロードします。zipファイルを展開し、chromedriver.exeを適当なフォルダー(例:C:\Program Files\ChromeDriver)を作成しコピーします。
プログラムで呼び出すときにPATHを通しておくと便利です。PATHの追加はコントロールパネルの環境変数の編集でします。今回の場合は C:\Program Files\ChromeDriver を追加します。
Google Chromeのアップデート停止
Google ChromeのバージョンとChromedriverのバージョンを揃える必要があるため、Google Chromeのアップデートを中止する手続きをします。
C:\Program Files (x86)\Google\Update のGoogleUpdate.exeをファイル名変更します。(例:GoogleUpdateStop.exe)

Seleniumのインストール
pipコマンドでインストールします。これで準備完了です。
pip install selenium
Seleniumによる半自動化コード作成
下記のようなWeb打刻サイト(ここでは https://hoge.co.jp/kanri とする)にユーザーID(hogehoge)とパスワード(hoge1234)を入力し、出社もしくは退社をクリックすることを目指します。

下記のようなPythonコード(ファイル名は hoge.py とします)で実現しました。方針はブラウザを開き、場所を特定し、テキスト入力やクリックをするという流れです。
#coding:utf-8
from selenium import webdriver
#chromedirverのPATH通していれば、わざわざパス指定不要
driver = webdriver.Chrome()
#出勤システムトップページにアクセス
driver.get("https://hoge.co.jp/kanri")
#ユーザーid入力
user_id_box = driver.find_element_by_name("user_id")
user_id_box.send_keys("hogehoge")
#パスワード入力
pass_box = driver.find_element_by_name("password")
pass_box.send_keys("hoge1234")
#出勤ボタンをクリック
attend_btn = driver.find_element_by_xpath("//input[@type='button' and @value=' 出 社/Clock In ']")
attend_btn.click()
#Chrome終了
driver.quit()
ちなみにPythonの実行ですが、最も簡単な方法はコマンドプロンプトでhoge.pyのあるフォルダに移動し下記を入力すればできます。
python hoge.py
各種コマンドの説明はウェブにたくさんある(例えばこれ)のでそれを参考に作成します。あとは目的のWeb打刻サイトのHTMLソースからキーワードを探しながらあれこれ試せばできると思います。
下記のYoutubeもSeleniumの理解に捗りました。
バッチファイル
アイコンをクリックすれば実行してほしいので、バッチファイルを作成します。エディタ(メモ帳など)を開き下記を入力し、hoge.batというファイルネームでhoge.pyと同じフォルダに保存すればOKです。
hoge.py
pause
メールソフト(Becky!)でバッチファイルを実行
M5Stackから連携したいと思い、M5StackからIFTTTでメール送信し、Becky!の振り分け機能でバッチファイルを実行させた。他のメールソフトでも可能なのかどうかはわからないが、Becky!を使っててよかった。
IFTTT
マイコンからメール送信するのにIFTTTのサービスを用いた。Webhook+E-mailで事足りた。設定後にWebhookのdocumentationからMake a POST or GET web request to:のURLをコピーすればよい。今回はEventとしてgohomeとattendanceの2つ作成した。