勤怠ボタンタップをAutomatorを使用して自動化してみた話
[課題]
私の会社では、出退勤ボタンをWeb上で押す必要があります
Webにアクセスして出退勤ボタンを押すのが毎回面倒、、。と思ったのでAutomatorを使って
起動したらボタンを押してくれるアプリを作りました
「出勤」「休憩開始」「休憩終了」「退勤」4つボタンあるので1スクリプト1ボタンみたいなイメージです
[最終的なコード]
set userNumber to 2
if application "Google Chrome" is running then
--起動している場合--
tell application "System Events"
tell process "Google Chrome"
--上部のメニューバー左から8つ目をクリック→中の2番目をクリック--
click menu item userNumber of menu 8 of menu bar 1
end tell
end tell
else
tell application "Google Chrome"
activate
end tell
tell application "System Events"
tell process "Google Chrome"
--起動時のウインドウを閉じる--
keystroke "w" using command down
click menu item userNumber of menu 8 of menu bar 1
end tell
end tell
end if
--該当のプロファイルのタブが開くのを待つための時間
delay 1
tell application "Google Chrome"
open location "勤怠管理のURL"
-- ページが読み込まれるまで待機
delay 2
-- セッション切れでログアウトしていないかどうかをチェック
tell front window
tell active tab
set frontText to execute javascript "document.getElementsByClassName('modal-title')[0].innerHTML;"
if frontText is equal to "ID,パスワードを入力してください" then
execute javascript "document.getElementById('id').value='設定したID';"
execute javascript "document.getElementById('password').value='設定したパスワード';"
execute javascript "document.getElementsByClassName('btn-control-message')[0].click();"
delay 2
end if
execute javascript "document.getElementById('出勤ボタンのdivタグに含まれていたid属性の値').click();"
end tell
end tell
end tell
作業遍歴
1〜3は、こちらの記事を参考に対応
1. Automatorで作業開始
2. 起動している場合と起動していない場合で出しわけ
3. プロファイル切り分け
IDとパスワードさえ、把握していればどのプロファイルから開いてもいいWebページだけど
会社に関する作業なので会社用のプロファイルでアクセスしたいので、切り替え処理を入れてます
Macでは上部のメニューバーからプロファイルを切り替えられるので
それをスクリプト化
[最終的なコード]で言うとここら辺
tell application "System Events"
tell process "Google Chrome"
click menu item userNumber of menu 8 of menu bar 1
end tell
end tell
0始まりじゃないのが意外だった、、
4. Chrome起動時のブラウザを閉じる
Chromeが起動していない場合は、起動させる際に
プロファイル切り替え用のウインドウが表示されます
この切り替え用ウインドウは今後使用しないので、ショートカットのCommand + Wと同じ要領で閉じます
そのスクリプトはここら辺
--起動時のウインドウを閉じる--
keystroke "w" using command down
※右下の「起動時に表示する」のチェックを外せば、プロファイル切り替え用のウインドウは表示されなくなるので
表示しないにしている場合は、「keystroke "w" using command down」の処理は不要です
ショートカットの実現方法はこちらの記事を参考しました
5. ホームページー上のボタンをクリックする処理
GoogleChromeの設定を変更する必要あり
※変更しないと、AppleScriptからの操作を受け付けてくれない※
- GoogleChromeを開いた状態
- メニューバーから「表示」をタップ
- 「開発/管理」をタップ
- 「Apple Eventsからの JavaScript を許可」をタップ
6. ログアウトしている場合はログイン処理を行う
たまにセッションが切れて、ログアウトしていることがあるのでログイン処理を行う
ログアウトしている場合は、「ID,パスワードを入力してください」モーダルが立ち上がっているはずなのでそれを利用
tell active tab
set frontText to execute javascript "document.getElementsByClassName('modal-title')[0].innerHTML;"
if frontText is equal to "ID,パスワードを入力してください" then
execute javascript "document.getElementById('id').value='設定したID';"
execute javascript "document.getElementById('password').value='設定したパスワード';"
execute javascript "document.getElementsByClassName('btn-control-message')[0].click();"
delay 2
end if
7. タップしたいボタンのid属性をもとにボタンをタップする処理を追加
execute javascript "document.getElementById('出勤ボタンのdivタグに含まれていたid属性の値').click();"
余談
AppleScriptについて色々調べている時に知った話をざっくばらんに挙げていく
アプリを作成した→アプリをダブルクリックすると「補助アクセスが許可されていません」エラーが表示された場合
- Macのシステム設定を開く
- 左の一覧から「プライバシーとセキュリティ」をタップ
- 「アクセシビリティ」をタップ
- 先ほど、作成したアプリが表示されているのでONにする
上のように許可した後に、アプリのスクリプトを書き換えて保存→アプリをダブルクリックすると「補助アクセスが許可されていません」エラーが表示された場合
- Macのシステム設定を開く
- 左の一覧から「プライバシーとセキュリティ」をタップ
- 「アクセシビリティ」をタップ
- 該当のアプリを選択
- 左下の-ボタンをタップしてアクセシビリティの一覧から削除する
- もう一度、アプリをダブルクリック
- 「補助アクセスが許可されていません」エラーが出るので再度、システム設定を開いてアクセシビリティをONにする
Discussion
有用なポスティングありがとうございます
現在の例のGitHubコードを見ることはできますか?
申し訳ございません。
GitHubに、コードはあげておりません。
[最終的なコード]をご参考ください。