C-RISEの村井です。
今年はkintone×RPAネタでアドベントカレンダーを書き終えてほっと一息ついてた所ですが、ふとRPAのアドベントカレンダーを見てたら面白そうなテーマが…
@kou1209 さんの CoopelでRPAチャレンジ! です。
Coopel とはDeNAさんのクラウド型RPAサービスです。
そのクラウド型RPA「Coopel」でRPAチャレンジをされてる記事を拝見しインスパイアされちゃいました。
「同じクラウド型RPAを謳うサービスとして クラウドBOT でもチャレンジせねば」
という事で急遽書き始めた今年のアドベントカレンダー第2段は「クラウドBOTでRPAチャレンジ!」です。
クラウドBOTとは?
クラウドBOT®は、Webブラウザを自動操作するBOT(ロボット)をノーコードで作成できるクラウド型のRPAサービスです。
単純なデータ入力業務からWebアプリケーション間のデータ連携などWebブラウザ上で行っている様々な操作をクラウド上で自動化する事ができます。
料金は、無料プランから提供しており、有料プランは月額3300円(税込)から利用できます。
そして、最も特徴的な機能は下記3点です。
- WebブラウザがあればBOT作成も実行もできる(専用ソフトやプラグインは不要)
- Webブラウザがあれば利用できるのでWindows、Macに限らずスマホやタブレットでも利用できる
- 作ったBOTは自動的に入出力が定義されてAPIとして実行する事も可能
RPAチャレンジとは
UiPathが提供しているRPAエンジニア向けのお題です。
実際のサイトはこちらです。
- EXCELファイルから10行分のデータを抽出
- 指定のWEBフォームにデータを入力
- データ件数分の入力を繰り返す
といった内容ですが、このWEBフォーム、結構クセが強いので下記の課題をクリアする必要があります。
- inputタグのnameが毎回動的に変化する
- inputタグのidが毎回動的に変化する
- inputタグの位置が毎回動的に変化する
今回は、 @kou1209 さんの記事を読んで解法も分かってるので、あえて同じ解決手段でチャレンジしてみます。
本記事では、クラウドBOTでRPAチャレンジのBOTを作る場合、どのような作り方になるのかという手順をステップごとに紹介していきたいと思います。
ステップ毎にスクリーンショットを入れながら説明していくので長文になると思いますが、気長にお付き合い下さい。
BOTの基本シナリオ
今回作るBOTは下記の流れで実行していきます。
- RPAチャレンジのサイトからExcelファイルをダウンロード
- ダウンロードしたExcelファイルから入力対象のデータを抽出
- RPAチャレンジのサイトでチャレンジスタート(開始ボタン実行)
- Excelから抽出したデータをフォーム入力
- データ件数分、フォーム入力を繰り返す
- RPAチャレンジの結果メッセージを取得
1. RPAチャレンジのサイトからExcelファイルをダウンロード
まずは、RPAチャレンジに使用するExcelファイルをダウンロードする所から自動化したいと思います。
下記はBOTのエディタ画面です。
エディタ画面内にURL入力欄があるのでこちらにRPAチャレンジのサイトURLを入力します。
RPAチャレンジのページが表示されました。
実はこの画面は、クラウド上で実行されている仮想ブラウザの画面を転送表示しています。
つまり、クラウド上のブラウザを遠隔操作しているという事です。
そのため、画面転送に多少の遅延が発生します。
少し動きがもっさりしてるなと思われるかも知れませんが、遠隔操作してるからだねと優しく見守ってください。
操作対象のページが表示されたら、エディタ左上の「≡」アイコンをクリックしてサイドメニューを開きます。
サイドメニュー内の「ブラウザ操作を記録する」ボタンを押すと、以降の操作は自動記録されます。
最初のタスクとして、RPAチャレンジのサイトURLを入力するタスクが自動追加されました。
入力したURLは値1というデータ名で記録されています。
今回は、Excelファイルをダウンロードする操作から自動化するので「EXCELファイルをダウンロード」のボタンを選択します。
画面内の要素を選択するとメニューが表示されるので、メニューから「その他の機能 > ダウンロード」を選択します。
ファイルのダウンロードが始まると画面右上に通知が表示されます。
ここでいう「ダウンロード」とは、仮想ブラウザ内にダウンロードする事を指します。
仮想ブラウザがある所、つまりクラウド上にダウンロードするという事です。
通知が消えたら、赤く光っている「ダウンロード(1)」をクリックします。
仮想ブラウザがダウンロードしたファイルが表示されるのでコピーしたいファイルにチェックを入れて「1ファイルをコピー」のボタンをクリックします。
ダウンロードする毎にファイル名が変化する場合は、ここでファイル名のパターンを入力するのですが、今回は"challenge_ja.xlsx"のファイル名固定なので、そのままデータ名に「excelファイル」とだけ入力してコピーします。
サイドメニューを開くとデータ名「excelファイル」にエクセルファイルがコピーされている事が確認できます。
2. ダウンロードしたExcelファイルから入力対象のデータを抽出
次はダウンロードしたEXCELを開きます。
一般的なブラウザと同じくクラウドBOTの仮想ブラウザもEXCELを操作する機能は対応していません。
そこで、通常ブラウザではできない機能に対応する為の拡張機能を利用します。
まずは、拡張機能を表示する為の新しいタブを開きます。
その後、右上の「︙」アイコンから拡張機能を選択します。
拡張機能のパッケージ一覧からExcel(xlsx)を選択します。
今回は、ダウンロードしたexcelファイル内のデータを読みたいので「ビューア」を選択します。
「使用する」ボタンをクリックすると拡張機能「Excel(xlsx)ビューア」が開きます。
先程新しく開いたタブにビューアが表示されました。
URLを見ると特殊なプロトコル「cbot-extension://〜」から始まるURLになっています。
クラウドBOTの仮想ブラウザからしか呼び出せないURLですね。
拡張機能は通常のWEBページと同様に操作できるので、拡張機能に対する操作もRPAのタスクとして記録していきます。
まずは、ビューアで読取りたいExcelファイルをアップロードする為「ファイルを選択」ボタンをクリックします。
先程までと同様に操作選択のメニューが表示されたので「クリック」を選択します。
通常ブラウザの場合、ここでアップロードするファイルを選択するエクスプローラー等がポップアップされるのですが、クラウドBOTの場合はここで既にデータにコピー済みのファイルが選択できます。
先程ダウンロードファイルをコピーした「excelファイル」を選択します。
ビューアにファイル「challenge_ja.xlsx」がアップロードされました。
「次へ」ボタンをクリックするとビューアのステップ2へ進めます。
ちなみに今回ダウンロードしてきたEXCELファイル「challenge_js.xlsx」のデータの中身はこんな感じです。
ビューアではタイトル行を含んだ範囲を指定します。
今回は「A1:G11」と入力し「次へ」ボタンをクリックしてステップ3へ進めます。
この操作もタスクとして記録されます。
1行目はタイトル行なので、2行目〜11行目までの10行がデータ行数として認識されました。
ビューア表示する準備が整ったので「表示ボタン」をクリックします。
EXCEL内のデータが表示されました。
この表示されたデータも通常のWebページと同じように扱えます。
まずは1行1列目の苗字「井上」を選択しテキストをコピーしてみます。
順次、「名前」「会社名」「部署」「住所」「メールアドレス」「電話番号」とデータ名をつけながらコピーしていきます。
コピーしたデータリストはサイドメニューのデータ欄の「ビューア」から確認してみましょう。
1行目の各データに名前をつけてコピーされている事が分かります。
しかしこのままだと2行目、3行目と大量にデータをコピーする操作をする事になり効率的ではありません。
そこで、クラウドBOT特有のグループ機能を使用してみます。
まずは、1行1列目の要素を選択し、操作メニューから「グループ範囲を探す」を選択します。
現在、赤色の枠で囲まれているのは1行1列目の「井上」だけです。
この赤枠を広げてグループ化する範囲を探します。
「選択範囲を」広げるをクリックします。
まだ、1行1列目の範囲が赤枠で囲まれています。
もう一度「選択範囲を」広げるをクリックします。
今度は1行目全体が赤枠で囲まれました。
この枠の中には1行目の下記データが含まれています。
- 苗字
- 名前
- 会社名
- 部署
- 住所
- メールアドレス
- 電話番号
この7項目を一つのグループとしてまとめます。
この後繰り返し処理したい2行目以降の範囲が青色の枠で囲まれている事も確認しましょう。
ここで「グループ範囲を確定」を選択します。
グループ化すると1行目の「苗字」〜「電話番号」まで7列のデータをコピーするタスクが青枠で囲まれました。
サイドメニューを開いてみましょう。
この青色の範囲は「グループ1」のデータを作る為に繰り返し処理しますという意味です。
データのビューアを開いてみましょう。
先程まで「データ」タブの中にあった「苗字」〜「電話番号」までが消えています。
代わりに「グループ1」のタブが増えました。
グループ1に表示を切り替えてみます。
「データ」タブでは縦に並んでたデータが横列に並んでいます。
グループ化する事で対象データは表データの1行目に変換されたのです。
自動的に割り当てられたグループ名「グループ1」を選択すると名称を編集できるので「顧客一覧」に変更しました。
では、残りの2行目以降のデータをコピーする為に、下記の「グループ処理を完了」ボタンをクリックします。
Excelビューワに表示されている10行全てがグループデータとしてコピーされました。
サイドデータビューアを開いてみるとコピーされた10行を確認できます。
それでは、EXCELデータを読み込む前処理が終わったので、本題のRPAチャレンジに進める為「Rpa Challenge」タブをクリックして画面を戻します。
タブ切り替えも一つのタスクとして記録されます。
3. RPAチャレンジのサイトでチャレンジスタート(開始ボタン実行)
まずは、RPAチャレンジを開始する為に「開始」ボタンをクリックします。
この時点からRPAチャレンジの処理時間が計測されるようです。
4. Excelから抽出したデータをフォーム入力
ROUND1が始まりました。
ROUND1ではEXCELの1行目のデータを入力するのですが、今回は10回繰り返し入力する必要があるのでサイドメニューのデータ欄から「顧客一覧」の操作メニューを開きます。
少し分かりにくいですが「10明細行」と書かれ右側の「<」をクリックすると開きます。
10明細分繰り返し処理をしたいので「グループを使う」というボタンをクリックします。
先程のグループデータを作る時と同じように青枠が表示されました。
ただ、今回はグループ名「顧客一覧」の右側に「作る」ではなく「使う」と表示されてます。
「作る」の時は画面内で選択した範囲を基準に繰り返しデータをコピーしますが、「使う」の場合はコピー済みのグループデータを基準にデータ行数分の繰り返しが行われます。
それでは、グループ処理の枠ができてたのでこの中に繰り返し操作したい処理を記録していきます。
まず、フォーム左上にある「メールアドレス」を選択してメニューから「その他機能」「要素セレクタを指定する」を選択します。
今回は、要素セレクタを直接指定するのでどの入力欄からメニューを開いても問題ありません。
要素セレクタを指定するダイアログが開いたら「任意のセレクタで要素を探す」の欄に
@kou1209 さんの記事を参考に「input[ng-reflect-name="labelLastName"]」と入力します。
虫メガネのアイコンをクリックすると入力したセレクタで目的の要素を認識できるか確認できます。
今回は「苗字」の欄が赤く囲われたので問題なく認識しているようなので「閉じる」ボタンをクリックします。
セレクタで指定した要素にデータを貼り付ける為、苗字の欄の所にある「≡」をクリックしてメニューを開いて下さい。
※要素セレクタを指定後、対象要素を再度クリックすると自動識別のセレクタに上書きされてしまうので要素セレクタを指定した直後の「≡」からメニューを開いて下さい
次いで「データを貼り付け > 顧客一覧:グループデータ」を選択します。
グループデータ「顧客一覧」内のデータ名が表示されるので「苗字」を選択します。
さらに次のデータも順次同じ手順で要素セレクタ指定→データ貼り付けの操作をしてタスクを記録していきます。
と思ったら、この時点でこんな画面が表示されました。
どうも仮想ブラウザが停止してしまったようです。
実は、クラウド上で稼働している仮想ブラウザはサーバレスという機能を利用している為、最大実行時間10分という制約があります。
10分に到達するとブラウザが落ちてしまうのです。
でも、ブラウザが終了しても今までの操作が無駄になる事はありません。
「仮想ブラウザを起動してタスクを再実行します。宜しいですか?」の質問に「OK」と答えると再度仮想ブラウザを起動し今まで記録したタスクを一通り再実行して元のタスク位置まで復帰してくれます。
念の為、サイドメニューを開いてみると現在仮想ブラウザが起動してからどれだけ経過しているかインジケータで確認する事ができます。
この実行時間10分の制約を超える場合、Cloud BOT Agentを使用するという方法もあるのですが、今回のテーマではないので割愛します。
気を取り直して、各データの要素セレクタ指定とグループデータの貼り付けを再開します。
データとセレクタの関係をまとめると下記の通りです。
- 苗字 input[ng-reflect-name="labelLastName"]
- 名前 input[ng-reflect-name="labelLastName"]
- 会社名 input[ng-reflect-name="labelCompanyName"]
- 部署 input[ng-reflect-name="labelRole"]
- 住所 input[ng-reflect-name="labelAddress"]
- メールアドレス input[ng-reflect-name="labelEmail"]
- 電話番号 input[ng-reflect-name="labelPhone"]
グループ処理の最後のタスクとして「登録」ボタンのクリックを記録します。
5. データ件数分、フォーム入力を繰り返す
1件目の登録が完了したので「ROUND 2」に進みました。
ここまででグループ処理の一連のタスク記録が完了したので「グループ処理を完了」をクリックする事で残りの2行目〜9行目まで繰り返し処理が行われます。
尚、グループデータを「作る」時も「使う」時もグループ処理を完了しようとすると下記のようなメッセージが表示されます。
これは、グループ処理のタスク追加を終了し残り全件の繰り返し処理をするので、タスクの位置もグループ処理の外に移動しますがいいですかという確認です。
グループ処理を完了するとRPAチャレンジも完了し結果が表示されました。
158秒と表示されていますが、途中でブラウザを再起動した為ですね。
実際には記事用にスクリーンショット等を取りながらBOTを作ってるので1時間程度のBOT作成時間がかかりました。
BOTも何度か再実行してるのでスクリーンショットの画面表示に少し不整合があるかもしれません。
次の画像と速度の秒数が異なるのもその一つです(笑)
6. RPAチャレンジの結果メッセージを取得
最後に結果メッセージをテキストコピーするタスクを追加します。
全てのタスク登録を終えたのでBOTを保存します。
サイドメニューの「保存」アイコンをクリックします。
保存画面が開くのでBOT名を入力します。
また、クラウドBOTは操作記録中にて入力した情報をBOTの入力データ(いわゆる引数)として自動定義されるようになっています。
つまり、BOT実行毎に毎回入力データを書き換えて実行できるようになっているのです。
今回、直接手入力した情報はEXCELデータを抽出する範囲を指定する「A1:J11」だけでした。
この情報はBOT実行毎に書き換える必要が無いので入力データから外しましょう。
「入力データを選択」をクリックします。
EXCELの範囲が記録された値12のチェックを外して青色の☑アイコンで適用します。
データが入力値から外されてもBOT内に保持する内部データとして記録された状態となりますので実行時に任意指定できなくなるだけで動作的には影響ありません。
次に保存画面を下にスクロールすると出力データというデータリストが確認できます。
クラウドBOTはWEB画面上からコピーしたデータはBOT実行者が必要なデータとして自動的に出力データ(いわゆる返り値)に定義されるようになっています。
こちらも何を出力するか選択設定できますが今回はこのまま保存したいと思います。
「保存」ボタンをクリックします。
これでBOTの作成が完了しました。
ここまでWEB画面を操作しながらタスクを記録し、ノーコードでBOTを作成する事ができました。
お疲れ様でした。
BOTを実行してみる
では早速BOTを実行してみます。
今保存したBOTの詳細画面から「実行する」ボタンをクリックします。
今回のBOTは入力データが無いのでこのまま「実行」ボタンをクリックします。
入データが定義されているBOTの場合はこの画面で入力データを書き換えてから実行する事ができます。
実行中、自動操作している仮想ブラウザの画面がパラパラ表示されますが画面の動きが早くて転送が追いついていない感じです。
RPAチャレンジの完了画面が表示されました。
BOT実行が完了すると出力データが表示されます。
RPAチャレンジサイトからダウンロードしてきたEXCELファイルも出力されてますね。
さらにタブを切り替えれば顧客一覧のグループデータも出力されている事が分かります。
今回は、手動で実行しましたが、このBOTをAPIで実行すれば入力データを引数として指定し、出力データを返り値として受け取れるREST APIとしても呼び出し可能です。
実行したログを確認
最後に実行ログを確認してみましょう。
BOTの実行ログはクラウド上に記録されています。
今回は成功した実行結果2件のログが表示されています。
「詳細」をクリックしてみましょう。
ログ詳細では、実行結果の出力ログを閲覧したり、実行時のスクリーンショットを確認する事ができます。
まとめ
という事で「クラウドBOT」でRPAチャレンジやってみました。
無事実行できてよかったです。
RPAチャレンジ初めてやってみましたが、RPAの基本的な操作を練習するのに良い題材ですね。
今回は、クラウドBOTを使って下記操作をご紹介しました。
- WEBサイト上からのファイルダウンロード
- ダウンロードファイルをBOTのデータにコピー
- ファイルをWEBサイトにアップロード
- 拡張機能(Excelビューワ)の利用
- テキストデータのコピーと貼り付け
- グループデータを使った繰り返し処理
また機会があれば、その他の便利な機能等もご紹介できればと思います。
良ければ先日書いたアドベントカレンダー kintone×RPAを完全クラウドで実現する話にも目を通して頂けると幸いです。
クラウドBOTはクラウド型RPAと言いながら、今後様々なWeb自動化を実現するプラットフォームへと成長させていく予定です。
もしご興味を持って頂けましたら、無料プランもご用意してますので是非触って遊んで頂ければと思います。
長々とご拝読頂きありがとうございました。
今年は、大雪で迎えるクリスマスとなりましたが皆様楽しいクリスマスをそして良い年をお迎え下さい。