💎

[業務改善]Rubyのseleniumを使用した勤怠打刻自動化

2021/09/24に公開

結論

打刻を自動化するプログラムを作成することで、毎日の定型作業の効率化を行いました。

背景

勤怠打刻で使用しているサービスでは、打刻の度にwebからログインし、打刻ボタンを押す必要がありました。
ボタン一つを押すためだけに、サイトにアクセスしてメールアドレスやパスワードを入力し、ボタンを押して閉じる、といった動作をする必要があり、1回にかかる時間は少ないものの、月単位などで合計するとそこそこの時間を時間が取られている状況でした。

行ったこと

Rubyのgemであるseleniumを使用することでwebブラウザを自動で操作できることは知っていたため、細かい記述は調べながらプログラムを作成しました。
勤怠サービスとのAPI連携やchrome操作のためのメソッドなど、調べながらであったためスムーズにはいかなかったものの、コードを書き始めてから半日程度で最低限動くプログラムを完成させました。
その後にログを出したりコメントを記述したりして最終的な完成まで5、6時間程度で行いました。

結果

自分のプログラムを展開したことで、細かな作業ではあるが毎日の定型作業が効率化され、社員がより生産性高い仕事に注力できるようになりました。

コード

以下に実際のコードを貼り付けます。
(メールアドレスなど、一部は書き換えています。)

require 'selenium-webdriver'
require 'pry'
require 'date'

# インスタンス生成
driver = Selenium::WebDriver.for :chrome

# AKASHIへアクセス
driver.get("https://atnd.ak4.jp/mypage/punch")
sleep(1)

# ログイン
company_id = driver.find_element(:id, 'form_company_id')
company_id.send_keys('~~会社コード~~')

login_id = driver.find_element(:id, 'form_login_id')
login_id.send_keys('~~メールアドレス~~')

password = driver.find_element(:id, 'form_password')
password.send_keys('~~パスワード~~')

login_btn = driver.find_element(:class, 'p-front__form__submit')
login_btn.click

sleep(1)

# ミュートボタン押下(音声が鳴らないようにする)
anounce_btns = driver.find_elements(:class => "c-switch__item")
mute_btn = anounce_btns[1]
mute_btn.click
sleep(1)

# 現在時刻取得
date = DateTime.now
time = date.hour
str_date = date.to_s    # date型を文字列に変換
month = str_date[5, 2]  # 月を取得
day = str_date[8, 2]    # 日を取得

if time < 16  # 16時より前、つまりは出勤
  attendance_btn = driver.find_element(:link, '出勤')
  attendance_btn.click
  puts "#{month}#{day}日 出勤完了!今日も1日頑張りましょう!!"
else  # 16時以後、つまりは退勤
  leaving_btn = driver.find_element(:link, '退勤')
  leaving_btn.click
  puts "#{month}#{day}日 退勤完了!今日もお疲れ様でした!!"
end

Discussion