kotでKingOfTimeの打刻や勤務時間を確認してみた
KingOfTimeで出勤打刻をした時に、たまにネットワークエラー等で正常に打刻されていないことがあります。管理画面から確認すれば即わかりますが、毎回開くのも中々面倒です。
KingOfTimeのAPIは一般向け公開となっておらず、APIを経由してのステータス取得はハードルが高めです。普段使っているMyレコーダーChromeアシスタントも公式提供のレコードページをアドオンとして扱っている仕組みで、直接APIキーに触れることはありません。
故に手段はなさそうだと思っていましたが、全くないわけでもありません。
パッケージネームは紛らわしいなとは思いますが、使い勝手は十分です。KingOfTimeのドメインによっては修正が必要ですが、正常に動作すると以下のような出力となります。
修正箇所も合わせて記載しました。
セットアップ
ソースコードをcloneします。
git clone https://github.com/takaiyuk/kot.git cd kot cp ./config.yaml.example ./config.yaml
そのままセットアップするとwebdriver-managerが最新のheadless Chromeを正常に取得できないため、fixされている版以降に差し替えます。
requirements.txt
-webdriver-manager==3.7.0 +webdriver-manager==3.8.5
依存ライブラリをインストールします。poetryが使われているものの、依存の解決でスタックしてすすまなかったためpipenvを利用しました。
pipenv install -r requirements.txt
次にs2.kingtime.jpを使っている場合は修正をいれます。
kot/scrapekot/crawl.py
--- a/kot/scrapekot/crawl.py +++ b/kot/scrapekot/crawl.py @@ -5 +5 @@ from kot.common.crawl import BaseCrawler -TOP_URL = "https://s3.kingtime.jp/admin" +TOP_URL = "https://s2.kingtime.jp/admin"
kot/scrapekot/scrape.py
--- a/kot/scrapekot/scrape.py +++ b/kot/scrapekot/scrape.py @@ -115 +117 @@ class Scraper: - work_hours = self._clean_text(self.soup.find("td", class_="custom3").string) + work_hours = self._clean_text(self.soup.find("td", class_="custom1").string) @@ -128,3 +130 @@ class Scraper: - st_string_dirty = self.soup.find_all("td", class_="start_end_timerecord specific-uncomplete")[ - -2 - ].text + st_string_dirty = [x.text for x in self.soup.find_all("td", class_="start_end_timerecord") if self._clean_text(x.text) != ''][-1] + if st_string_dirty[:4] == 'C(L)': + st_string_dirty = 'C' + st_string_dirty[4:]
このkot自体もコマンドの一部として利用するため、ローカルインストールします。
pipenv install .
config.yamlのaccount設定にKoTのアカウント及びパスを書き入れて準備完了です。
実行する
% pipenv run python -m kot scrape --console ScrapeKOTParams(is_amazon_linux=False, browser_kind=<BrowserKind.chrome: 'chrome'>, is_headless=True, is_console=True) 残りXX.0営業日: (X.0/XX.0 日) あとXX時間XX分必要: (XX時間XX分/XXX時間) 貯金: 0時間XX分 貯金を元に残り営業日の必要勤務時間数を算出すると: X時間XX分 2023-02-13の出勤・定時 出勤: 10:XX 定時: 19:XX
Unknown label found
と出力された場合はkot/scrapekot/scrape.py
に有給及び欠勤用のラベル一覧に追加しておきます。
あとがき
Dockerイメージとしても設定可能となっているはずですが、ファイルパスの取り扱い等でエラーが発生したためにローカルでの実行を採用しました。
King Of Timeの打刻確認は勿論のこと、一日の所定勤務時間余剰もすぐに分かるのでSpreadsheetで計算する手間が省けて便利です。流石にスケジュール申請等は不可能ですが、現状での累積時間確認を楽に行いたい場合はおすすめです。