🛠️

UI操作自動化ツール「sikulix」でVPN接続をRPA化する

2021/12/11に公開

はじめに

毎朝、リモートワークのためFortiClientを使いVPN接続を行う必要があります。不便なことにFortiClient上でVPN接続用のパスワードを記憶してくれず、パスワードを確認して入力する必要があります。また再接続も自動で行ってくれません。
毎回、「確認 → 入力 → 接続ボタンを押す」という流れが不便なので、UI操作自動化ツール「sikulix」を使って自動化してみました。その様子は下記の動画のようになります。

環境

sikulixのダウンロード

こちらから「Sikulix IDE」をダウンロードします。「Download the ready to use sikulixide-【バージョン名】.jar (SikuliX IDE for all systems)」をクリックすることでダウンロードが始まります。
また同時に必要となるJythonをダウンロードします。こちらのページから「Jython standalone」をクリックします。

そしてダウンロードしたファイルを任意のフォルダをつくり、まとめて格納します。
下記の画像では、Applicationのフォルダにsikulixのフォルダをつくって格納しています。
そのあと、sikulixide-【バージョン名】.jarをクリックするとsikulixが起動します。このとき、jython-standalone-【バージョン名】.jarは別のフォルダに移動します。

しかしMac OSの場合、インストール後、sikulixide-【バージョン名】.jarをダブルクリックして起動しても正常動作しません。その対処法は次の項目で説明します。

sikulixの

Macでsikulixを導入したのですが、さきほど説明したようにそのまま使おうとするとエラーが生じます。
具体的には、sikulixでスクリーンショットを取る機能が動かないといった問題です。
これは既知の問題で、その解決方法は公式のGithub wikiに説明があります。

かいつまんで説明すると、sikulixide-【バージョン名】.jarをダブルクリックして起動するのではなく、コマンドラインからsikulixide-【バージョン名】.jarを起動する必要があるようです。

そしてその時、「アクセシビリティ」と「画面収録」の許可をもとめるポップアップが現れるので指示に従います。
もしくはMacの「システム環境設定」->「セキュリティとプライバシ-」->「プライバシ-」にアクセスし、「アクセシビリティ」と「画面収録」で「Terminal」を追加します。Terminalにかわるアプリケーションを使用している場合は(筆者の場合、iTerm2)、そちらも「アクセシビリティ」と「画面収録」に追加しておくと良いでしょう。

そして下記のようにコマンドをうつことで、これで無事、sikulixを起動することができます。

java -jar 【sikulixide-2.0.5.jar保存先のパス】/sikulixide-2.0.5.jar
//今回の場合、java -jar /Applications/sikulix/sikulixide-2.0.5.jar

sikulix上でスクリプトを用意する

FortiClientのVPN接続を自動化するにあたって、sikulix上でスクリプトを用意します。
自動化するにあたって、下記の手順を考えました。

  1. MacのDockに固定してあるFortiClientのアイコンをクリック
  2. 「REMOTE ACCESS」をクリック
  3. 「Password」をクリック
  4. パスワードを入力
  5. 「Connect」をクリック

これをスクリプトに直すと下記のようになります。
sikulixをつかってクリックしてほしい場所は、「スクリーンショットを撮る」機能をつかいスクリプト上に貼り付けます。あとは実行ボタンを押すと動きを見ることができます。

1つ使っている中で気づいた注意点があります。
キーボードから文字入力を自動化するtype関数があるのですが、想定した入力と実際に入力される文字が異なることが見られました。例えば、「@」と入力するには「[」と記述しました。なので文字入力が正しく行われない場合は、対応する文字を探す必要があります。

cronとAutomatorを利用して自動化する

できあがったスクリプトは、sikulixから実行しなければなりません。
決まった時刻に定期実行する場合は、さらに工夫する必要があります。

そこでバッチファイルを用意し、.commandのついたファイルを用意します。
例えば、下記のように書きます。

#! /bin/bash
java -jar 【sikulixide-2.0.5.jar保存先のパス】/sikulixide-2.0.5.jar -r 【sikuliで用意したプロジェクトのパス】/【ファイル名】.sikuli

それをMacに標準で入っているAutomatorをつかって実行するアプリケーションを作成します。
※Automator:様々なワークフローを自動化して簡単に作業を効率化できる、Macの標準アプリケーション
Automatorを起動し、「アプリケーション」を選択します。

そして、先程つくった.command拡張子がつくバッチファイルを実行するように設定し保存します。

その後、macOSやLinuxで用意されているスクリプトを自動実行するデーモンプロセス「cron」をつかって、Automatorで作成したアプリケーションを定期実行するように設定します。例えば下記のようにすると、毎日8時45分に自動起動するような設定になります。

45 8 * * * open 【Automatorで作成したアプリケーションが保存されているパス】/VPN-Clicker.app

cronの時間設定は「分 時 日 月 曜日」となっています。「*」はワイルドカードをといい「全て」を表します。

上記の方法はこちらを参考にしました。

使ってみての所感

本記事で説明した内容でFortiClientのVPN接続を自動化することができました。
ただ日々使っている中で、sikulixの画像認識が動作しないことが見受けられました。
例えばDockに表示されるアイコンの数が増えると、FortiClientのアイコンが小さくなるためかクリックがうまく動作しませんでした。そのため、安定的な動作を実現するためには工夫が必要そうです。
またcronで自動化しなくても、Automatorのアプリケーションがクリックするだけでsikulixは動作し、VPN接続まで自動がしてくれます。結果として、いちいちパスワードを思い出さなくても良いので煩わしさが減りました。他にも、sikulixをつかってRPAを実践できそうです。

Discussion