#はじめに
以下の記事の続きです。今回はWinAutomationにおける自動化処理(Process)の作成についての記事となります。
【MicrosoftのRPA機能】「WinAutomation」とは?【その1 機能の説明】
この記事でWinAutomationのWebレコーダーによる自動化やExcel操作、変数の扱いについて説明します。
#自動化処理の作成画面「Processデザイナー」
WinAutomationの自動化処理はProcessデザイナーで作成します。
Processデザイナーの起動方法や各機能の説明については前回記事の下記部分をご確認ください。
Processの作成方法と「Process Designer」について
#Yahoo!路線情報の行程料金検索を行ってみる
今回はRPAツールの処理の定番、Yahoo!路線情報を使用して行程料金検索の自動化を行ってみます。
処理の大まかな流れとしては、3点です。
1.Excel上の出発地・到着地情報の一覧をWinAutomationが読み取り
2.読み取った出発地・到着地情報を元にWinAutomationがYahoo!路線情報にて料金検索を実施する
3.検索した料金の結果をWinAutomationがExcelに転記する
といったものです。がんばれWinAutomation。
実際に動作しているイメージは以下を参照してださい。
今更ですがRPAでよくあるシナリオのYahoo乗り換え案内検索をWinAutomationで自動化してみました。
— ナカ (@nakaamino) August 13, 2020
Excelの記載の「行数」分ループを廻してそれぞれの出発地到着地ごとの乗換回数が少ない順の料金を転機しています。出発到着地の記載が無い場合その旨を記載。
動画は2ループ分にカットしています。 pic.twitter.com/r2QBeb3eNo
##1.Excel上の出発地・到着地情報の一覧をWinAutomationが読み取り
用意したExcelはこんなレイアウトです。
WinAutomationで路線情報にExcel上の出発地(A列)と到着地(B列)を入力して検索し、そこで得られる料金と入力結果をC列とD列に入力します。
最初の処理はExcelの起動を行います。
Excelファイルの起動は「Launch Excel Action」(Excel起動アクション)を使用します。
Processデザイナー上で、Actions一覧から「Excel」→「Launch Excel」を探してダブルクリックします。
「Launch Excel Action」のプロパティウィンドウが立ち上がるのでここではどのファイルを起動するのかを設定します。
「Launch Excel」プロパティという箇所がデフォルトでは「with a blank document」という新規の空っぽのファイルを作る設定になっているので、今回は以下のように設定します。
プロパティ | 設定値 | 説明 |
---|---|---|
Launch Excel | and open the following document | 次のドキュメントを開くという設定 |
Document Path | 開きたいExcelファイルのパス | 出発地到着地が入力されているファイルを指定 |
それ以外はデフォルト値としますが、重要な項目だと思っているので説明をします。
プロパティ | 設定値 | 説明 |
---|---|---|
Make Instace Visible | チェック有り(デフォルト値) | Excelウィンドウを表示するか非表示にするかを選択します。 |
Store Excel Instance into | %ExcelInstance%(デフォルト値) | どのExcelを使用しているか特定するための名称です。 |
「Make Instace Visible」は今回は動作しているところがわかりやすく見えるようにONにします。 | ||
「Store Excel Instance into」は大切なプロパティ値です。後のExcelアクションで使用する特定のExcelインスタンスを格納する変数となる名前を入力します。これにより、複数のExcelスプレッドシートのうち、どれにアクセスするかを指定できます。 | ||
要は2つ以上の複数のExcelを開いて操作する時に今操作しているのはどちらのExcelなのかを把握するための情報です。WinAutomationでは、その単位をインスタンスと呼称します。インスタンスはExcel以外にもこの後のWeb操作にも出てくるのでとても重要です。 | ||
インスタンス名は自動設定されて変数として作成されます。今回は1つのExcelしか起動しないのでデフォルトのままとします。 |
アクションを設定すると自動的にVariablesという変数項目に上記で設定した「%ExcelInstance%」変数が設定されます。
次の処理ですが、今回の処理のポイントとしてはExcelの一覧から出発地と到着地を取得しますが、一覧上には何行までデータが入っているかわかりません。今回は3行レコードですが、ここは通常動的に変わります。Excelを開いてデータが無くなるまでぐるぐるとループする方法もありますが、WinAutomationではExcel上の最初の空の行・最初の空の列を取得してくれるアクションがあります。
それが「Get First Free Column/Row Action」です。最初に空白になる行または列を取得してくれます。
Processデザイナー上で、Actions一覧から「Excel」→「Get First Free Column/Row」を探してダブルクリックします。
「Get First Free Column/Row Action」のプロパティウィンドウが開きます。
このままプロパティの設定を説明します。
プロパティ | 設定値 | 説明 |
---|---|---|
Excel Instance | %ExcelInstance%(デフォルト値) | どのExcelを使用しているか特定するための名称です |
Store First Free Column into | %FirstFreeColumn%(デフォルト値) | 最初の完全に空の列の数値を格納する変数となる名前を入力します。 これは数字になります。 たとえば、列Fが最初の空の列である場合、「6」として格納されます。 |
Store First Free Row into | %FirstFreeRow%(デフォルト値) | 最初の完全に空の行の数値を格納する変数となる名前を入力します。 |
%FirstFreeRow%に空の行の値が入ってきます。今回のサンプルなら「5」です。
ここで重要な点として、すべてのプロパティ項目にデフォルト値が入っています。
WinAutomationの良い機能だと個人的に思うところとして、プロパティ値の設定が不要なことが多いところです。
まず、Excel Instanceの項目ですが、「Launch Excel」アクションの時に作成した変数%ExcelInstance%が自動的に入っています。
また、最初の空白行と列の値を返す変数についても「こんな感じでどう?」というように変数が設定されています。
個人的にはWinAutomationが簡単に使用できるツールの所以の1つだと思っています。
そのため、今回は変数名はこのままデフォルト値のまま使用します。
続いての処理はExcelの行数分のループを設定します。Webの操作は、操作はExcelの行数分ループをして処理を行いますので、ループ処理を追加します。
ループのアクションは「Loops」の「Loop Action」をダブルクリックします。
「Loop Action」のプロパティウィンドウが開きます。
プロパティ | 設定値 | 説明 |
---|---|---|
Start From | 2 | ループの開始行を表す値です。 |
End To | %FirstFreeRow-1% | ループの終了行を表す値です。 |
Increment By | 1 (デフォルト値) | ループ時のカウンターを繰り上げる値です。 |
Store Current Index into | %LoopIndex% (デフォルト値) | ループ時のカウンター値です。この変数の値は、反復のたびに増加します。 |
各項目の設定値の説明をします。 | ||
「Start From」を2としているのは2行目から処理を開始することを表しています。これは、1行目が列名項目になっているためその行を処理対象外とするために「2」を設定しています。 | ||
「End To」は2番目のアクションで取得したExcel一覧の最初の空の行値が入っている「%FirstFreeRow%」を設定していますが、よく見ていただくと「%FirstFreeRow-1%」となっています。これは、%FirstFreeRow%はあくまで最初の空の行となるため今回はループカウンターとして使用するには1行分多くなります。最終行はその1つ前の4行目のため調整のため、%FirstFreeRow%から1減算しています。 | ||
「Increment By」はループカウンターの増加値のためデフォルトのまま1を設定します。 | ||
「Store Current Index into」は、ループカウンターの変数名となります。ここも変える必要は無いのでそのままです。 |
設定するとProcessウィンドウは以下のようにLoopとEnd Loopが設定されます。
このLoop内でExcel行ごとの処理を記述していきます。
次の処理はExcelからの値の取得を設定します。
Excelからの値の取得は、「Read from Excel WorkSheet Action」で行います。
「Excel」→「Read from Excel WorkSheet」をダブルクリックします。
「Read from Excel WorkSheet Action」
こちらの項目には以下の設定を行います。
プロパティ | 設定値 | 説明 |
---|---|---|
Excel Instance | %ExcelInstance% (デフォルト値) | どのExcelを使用しているか特定するための名称です。 |
Retrieve | Single Cell's Value (デフォルト値) | 単一セルから値を取得する設定です。 |
Column | 1 | 何列目のセルを取得するかを設定します。 |
Row | %LoopIndex% | 何行目のセルを取得するかを設定します。 |
Store Cell Value(s) | %departure% | セルから取得した値を設定する変数名です。 |
今回はExcelの出発地列から値を取得したいのでColumnは1列目、Rowは上で指定したループカウンター(2からはじまって1ずつ増加)を指定します。
1回目のループでは1列目の2行目を取得することになるため、「A2」のセル値を取得します。
取得した結果を「%departure%」という名前の変数に格納します。ここでは「新潟」という文字が「%departure%」変数に入ります。
続いて到着地の値を取得したいので、同様に「Read from Excel WorkSheet Action」を追加します。
こちらの項目には以下の設定を行います。
プロパティ | 設定値 | 説明 |
---|---|---|
Excel Instance | %ExcelInstance% (デフォルト値) | どのExcelを使用しているか特定するための名称です。 |
Retrieve | Single Cell's Value (デフォルト値) | 単一セルから値を取得する設定です。 |
Column | 2 | 何列目のセルを取得するかを設定します。 |
Row | %LoopIndex% | 何行目のセルを取得するかを設定します。 |
Store Cell Value(s) | %arrival% | セルから取得した値を設定する変数名です。 |
出発地との違いは「Column」の値が2になっていることと値を格納する変数値を新たに「%arrival%」としているところです。
「Column」の値を2にしたことにより、1回目のループでは2列目の2行目を取得することになるため、「B2」のセル値を取得します。
取得した結果を「%arrival%」という名前の変数に格納します。ここでは「東京」という文字が「%arrival%」変数に入ります。
ここまででExcelから値を取得する部分が終わりです。
次にWebブラウザの操作に移ります。
##2.読み取った出発地・到着地情報を元にWinAutomationがYahoo!路線情報にて料金検索を実施する
Webブラウザの操作の流れは以下の通りです。
1.路線情報の画面を起動する
2.路線情報の出発地項目に「%departure%」の値を入れる
3.路線情報の到着地項目に「%arrival%」の値を入れる
4.検索ボタンを押下する
5.検索結果画面に遷移したら乗換回数が少ない順の画面に切り替える
6.表示された料金を取得して変数に格納する
今回はこの操作をWebレコーディングで行います。
Webレコーディングについては事前に操作対象とするブラウザにアドインをインストールしておきます。
アドインのインストールはWinAutomationのインストール時にあわせてインストールしてあるか、ProcessデザイナーのToolsメニューから以下の通りインストールが可能です。
Webレコーディングする前に事前に操作対象とするWebブラウザを起動し、操作対象とするページを開いておきます。
事前準備ができたのでWebレコーディングを開始します。
Webレコーディングは画面上部のWebレコーディングボタンをクリックします。
クリックするとどのブラウザを操作するかをするか選べる画面が表示されます。ここでは先程起動したEdgeを使用したいので「Use Edge」を選択します。
ブラウザと一緒「Live Web Recoder」というブラウザ操作の記録ウィンドウが表示されます。
こちらにWeb操作が記録されていきます。
そのため、ここでは以下の検索の操作を行っていきます。
1.出発に「新潟」、到着に「東京」と入力し、「検索」ボタンを押下します。
2.検索結果の画面が表示されたら「乗換回数順」に切り替えます。
3.1番上に表示されている金額を取得するために該当項目にカーソルをあわせます。そうすると項目が強調表示されるので右クリックまたは歯車アイコンを選択します。
4.メニューが表示されるので、データ取得する「Extract Element Value」を選択し、取得する要素として「Text」を選択します。
以上でレコーディング作業は終わりです。最後に「Live Web Recoder」の「Finish」ボタンをクリックします。
レコーディングが終了すると下記のように今行った操作がProcessデザイナーへ自動的にアクションとして設定されます。
ブラウザ起動からデータ入力、リンククリック、値の取得まで必要なアクションを自動的に設定してくれています。
各アクションの説明は今回は割愛しますが、重要と考えているポイントを記載します。
1.各アクションは「%Browser%」インスタンスの範囲で処理されている。
2.Webブラウザの操作はすべて構造解析され、「Controls Repository」という領域に保存される。
1については、Excel操作と同様にインスタンスが自動生成され、そのインスタンスを指定することでどのブラウザ・ページの操作なのかを指定しています。ブラウザの値を別のブラウザに転記するような操作な場合、「%Browser%」インスタンスの他に、「%Browser2%」インスタンスを用意することになります。
2については、WinAutomationの特徴的な機能の1つでブラウザの構造解析を行った上でその構造を「Controls Repository」に保存しています。
例えば、最後に料金を取得してきた項目は「10,230円」という名前でコントロールとして登録されています。
この実態については、10,230円コントロールをダブルクリックするとSelector Builderという画面が開き、以下のようなhtml要素にアクセスするコントロールだということが分かります。
このように構造解析した結果をコントロールとして保存されるので、同一コントロールを同じプロセスで複数回操作する時に再利用性の面で便利ですし、セレクター要素が変更された時にもコントロール側を直すだけで修正ができます。
「Controls Repository」については、前回記事の最後でも説明しているのであわせて確認してみてください。
【MicrosoftのRPA機能】「WinAutomation」とは?【その1 機能の説明】
処理の話に戻ります。
ブラウザの自動化処理を書くことができましたが、このまま実行すると毎回、「新潟→東京」間の料金検索を行う処理になります。
ここをExcelから取得した値で検索するために修正を加えます。
新潟の文字が入っている1つ目の「Populate Text Field on Web Page Action」をクリックします。
プロパティウィンドウが起動しますので以下のように変更します。
Text to Fill Inの新潟を…
Excelの出発地の値が入っている「%departure%」に変更します。
続いて、東京の文字が入っている2つ目の「Populate Text Field on Web Page Action」のText to Fill Inも「%Arrival%」に変更します。
以上の変更だけで動的に出発地到着値をWebブラウザに渡すことができます。
Webブラウザの操作として最後にブラウザを閉じる操作を追加しておきます。
End Region~の下にアクションを追加します。End Region~アクションをクリックします
「Web Automaiton」の「Close Web Browser」をダブルクリックします。
プロパティ | 設定値 | 説明 |
---|---|---|
Web Browser Instance | %Browser% (デフォルト値) | どのWebブラウザを使用しているか特定するための名称です。 |
Web Browser Instanceに今回閉じたいインスタンスである%Browser%が自動的に入ってくれているため特に設定変更の必要がありません。
素晴らしい。
以上でWebブラウザの自動化操作は終わりです。
最後に取得した金額をExcelに転記する処理を追加します。
##3.検索した料金の結果をWinAutomationがExcelに転記する
料金の取得については上のWebブラウザの自動化内で実施しています。
該当アクションを確認します。こちらを確認すると取得した値は「%AttributeValue%」という項目に変数されていることが分かります。
Get Details of Element on Web Page Action
「%AttributeValue%」をExcelに書き込むにはExcelを操作する「Write to Excel WorkSheet Action」を選択します。
Write to Excel WorkSheet Actionのプロパティ画面が起動します。
転記の設定は以上です。1アクションの追加だけで終わりました。簡単。
以上で、すべての処理が記載できました。完成版のProcessはこのような形です。
Varaibles欄(変数欄)はこうなっています。いくつか変数が出来ていますが、こちらで名称を指定したのは%departure%と%Arrival%だけですね。あとはすべて自動生成のものを使用しています。
こちらの処理実行すると、以下の結果が得られます。ちゃんと出発地・到着地ごとの料金が得られました。
#まとめ
記事中にも書いておりますが、WinAutomationは自動的に変数が設定されるところ、また、新しいアクションを指定すると利用する変数の候補まで表示してくれます。初めて使う方にとって便利機能だと思います。(私もその一人です。)なにより開発生産性が高いという点が大きなのメリットだと思います。
今回は、料金検索処理を通じてExcelとWebブラウザを使用した簡単な自動化方法を記載してみました。
ただし、この場合、ビジネスエラーが発生した場合の対処が実現できていませんし、料金も文字列状態になっているためその後の処理で使いづらいです。
次回はこのProcessをベースに想定されるビジネスエラーへの対応や変数値の文字列操作を行ってみます。