今回はNTTデータより販売されているWinActor(ウィンアクター)を利用して乗換案内ロボットを作成してみました。

手元のiPhoneやiPad、またはサブディスプレイでこちらのページを表示した上でご自身のPCにて実際にロボットを作成して頂ければ理解が深まるかと思います。

また本ページ説明の疑問点はコメント頂ければ出来る範囲で回答しますので宜しくお願いします。

ロボット概要

指定のExcelファイルに記載された出発駅、到着駅の名称をYahoo!路線情報に転記し、検索結果を書き戻すという作業を最終行まで繰り返すというものです▼

はじめに

今回使用するのは出発駅と到着駅の書かれたExcelファイルとWinActorのソフトウェアです。

WinActorのライセンスには「フル機能版」(90.8万円/年)と「実行版」(24.8万円/年)がありますが、ロボットの開発のためには「フル機能版」のライセンスが必要となります。

極力簡単なロボットの作り方を共有するつもりですが、私よりももっと易しい作り方もあるかと思います。

ご参考までにお考えください。

利用するExcelファイル

sample.xlsxというファイルを利用します。
A列 出発駅
B列 到着駅
C列 料金

上記ヘッダーと共に、2行目~6行目のA、B列には任意の文字列が入力されています。

こちらのC列を埋めていくイメージです▼

WinActorの起動

  1. デスクトップ上に配置したWinActorのショートカットをダブルクリックします▼
  2. WinActor起動後の画面がこちらです。
    赤枠で囲っている「フローチャート」画面にロボットの動作シナリオを作成していきます▼
  3. 今回は赤枠で囲っている「メイン画面」、「フローチャート」、「変数一覧」以外は基本的に使用しませんので他のウィンドウを閉じておきます▼

変数の作成

  1. まずは「値を一時的に保管しておく箱」である変数を作成します。
    変数一覧ウィンドウの「+」ボタンをクリック▼
  2. 新しい変数の名前の入力が求められるので、今回の交通費検索で使用するExcelファイルの項目にある「出発駅」、「到着駅」、「料金」の3つの変数を作成します。
    なお、これはWinActorの特徴の一つなのですが、変数に型が存在しません▼

Excelファイルから変数へデータ抽出

  1. 次はフローチャートウィンドウを操作していきます。
    画面左部分の「ノード」から「Excel操作」のアクションをシナリオ部分へドラッグ&ドロップします▼
  2. メイン画面のシナリオ上に設置した「Excel操作」をダブルクリックすると、プロパティが立ち上がります。
    ここでどのような操作をするかが選べますので、今回は「値の取得」を選択します▼
  3. 次に値を取得したいファイル、シート、セルを入力し、取得した値の格納先の変数を指定します▼
    ※ファイル名、シート名はそれぞれ「…」ボタンを押下することで参照が可能です
  4. 到着駅に関しても同様に変数へ格納設定を行います▼

路線検索ページを開き変数から入力

  1. 次にフローチャート画面左側のタブを「ライブラリ」に変更し、ここから「17.IE関連」→「03.テキスト取得」→「URLを指定してIE起動」
    を選択し、メイン画面のシナリオ上へドラッグ&ドロップします▼
  2. 設置したシナリオ上の「URLを指定してIE起動」をダブルクリックし、プロパティを開きます。
    そして、URLには下記のYahoo!路線検索のurlを入力します。
    リトライ回数には、IE起動に失敗することも考えて「1」を入力しておきます。
    ※指定URL:https://transit.yahoo.co.jp/
  3. Internet Explorer立ち上がり、Yahoo!路線検索の画面が表示されましたが、まだウィンドウが最大化されていない状態です。
    今回の開発方法では画面上の位置情報を認識してロボットが動作しますので、全てのWebページは最大化して大きさを合わせておく必要があります。
    ライブラリの「11.ウィンドウ関連」からウィンドウの最大化をドラッグ&ドロップします▼
  4. 次に「路線検索ページに出発駅、到着駅を入力し、検索ボタンを押す」までを録画機能を用いて作成します。
    WinActorメイン画面の「編集/記録」部分にある「記録対象アプリケーションを選択ボタン」
    ※ターゲットマーク
    をクリックすると、マウスカーソルがターゲットマークに変化しますので、この状態でIEのウィンドウをクリックします▼
  5. 先ほどの4の操作で、どのウィンドウ上の操作を記録するかが設定できたので、「編集/記録」の左側にある録画ボタンをクリックします。
    そうすると、IE記録モードになりますので、そのまま路線検索画面に出発駅、到着駅を手入力後、検索ボタンを押します▼
  6. そうすると、フローチャート上にカミナリのようなマークのノードが作成されているので、これらを選択し、シナリオにドラッグ&ドロップし付け加えていきます▼
  7. このままでは出発駅、到着駅の入力が固定値になってしまいますので、最初に設定した変数から入力ができるように変更します。
    ダブルクリックでノードのプロパティを開き設定値をそれぞれ、出発駅、到着駅に変更しておきます▼

料金の安い順に並び替えて料金を変数に格納

  1. 検索ボタンのクリックにより画面遷移がありますので、次の動作を行うまでに1秒間待機するノードを挿入しておきます。
    「指定時間待機」挿入後にダブルクリックでプロパティを開き、待機時間を1,000ミリ秒に変更します▼
  2. 次に安い順に並び替えを行いますが、今回は「画像マッチング」操作を使用します。
    画像マッチングノードをシナリオへドラッグし、プロパティを開きます▼
  3. 先ほどの録画機能使用時と同様に、真ん中のターゲットマークをクリックして、路線検索のウィンドウを選択します。
    そうすると、プロパティ画面に選択したウィンドウが表示されました▼
  4. この画面上で「どの画像」を起点に「どの位置」をクリックするかを選択します。
    まずは、プロパティ画面左側の指のようなマークを選択して、起点とする画像を選択しましょう。
    今回選択するのは「安」マークと料金の「料」にかかる部分です。
    ※「安」マークだけだとページ上の他にも存在しているため▼
  5. そして、どの部分をクリックするかを選択します。
    プロパティ画面左側の青い十字のマークを選択し、料金の安い順の真ん中あたりを選択します▼
  6. 次に料金をコピーしますが、同様に画像マッチングで作成していきます。
    画像として選ぶのは「ルート1」、クリック対象として選ぶのは「料金部分」となりますが、下部の「アクション」をダブルクリックに設定しておきましょう▼
    ※料金部分を選択中ステータスにするためです。
  7. 現在料金部分が選択中になっているので、それを「ctrl+c」でコピーができるように設定します。
    まずは、メイン画面のターゲットマークで路線検索ページを選択、録画ボタンの右側の▼マークをクリックして「エミュレーション」を選択します▼
  8. 録画ボタンを押したら、路線検索ウィンドウを一度クリックして、「Ctrl+C」を押します。
    そうすると、操作記録リストに自動で操作がリスト化されますので、「CtrlをDown」「CをDown」「CをUP」「CtrlをUP」以外の項目を削除したうえで「操作のアクション化」をクリックします▼
  9. そうすると、クリップボード上に料金がコピーされている状態になりますので、「クリップボードから料金を変数へ移す」作業を行います。
    ノードからクリップボードを選択し、シナリオへドロップし、「クリップボードの値を取得」を選択。取得結果は変数「料金」に指定します▼

IEウィンドウを閉じてExcelに料金を記入

  1. これまで操作を行ってきたIEウィンドウをすべて閉じておきます。
    ライブラリの「17.IE関連」からIE操作(すべて閉じる)をシナリオに追加▼
  2. 次に新たな変数を設定します。
    後に「Excelの行ごとに操作の繰り返し」を行いますのでその準備のために、「現在何行目まで繰り返したか」をカウントする変数「行カウント」を作成しておきます▼
    ※この際1行目はヘッダーとなり、データをしては2行目からの繰り返しスタートなので、初期値は「2」に設定します。
  3. そして、Excelに料金を記入します。
    ノードから「Excel操作」を追加して、プロパティを開きます。
    操作は「値の設定」、設定値は「料金」設定先にsampleファイルを選択しますが、後に行繰り返しを設定するので、「セル位置」は「C%行カウント%」に設定しておきます▼
    ※CはC列を指定するため、変数の指定は%で括ります。
  4. ここまででExcelに記入する作業はできていますが、一つの繰り返し毎に変数「行カウント」の数値を1ずつ増やしていく作業を追加しておきます。
    ノードから「カウントアップ」をシナリオに追加し、計算結果に「行カウント」を選択します▼

繰り返しと分岐の作成

  1. ここまで作成した作業を繰り返し行うために、ノードから「繰り返し」をシナリオに追加します。
    なおこれまでに作成したノードは下部にグループ化しています▼
  2. 次に、出発駅に空白が来るまで繰り返しが進んだときに、繰り返しを終了できるように分岐を作ります。
    ノードから分岐をシナリオに追加します▼
  3. 分岐の「False」の中にはこれまで作ったノードのグループを、「True」には左部分のノードから「繰り返し終了」をドロップします▼
  4. 出発駅の変数が空白の場合に分岐が「True」になり、繰り返しが終了するように設定します。
    分岐グループをダブルクリックしてプロパティを開き、条件式設定をクリックします。
    条件は「出発駅」が空白になるように「値⇒ 」と等しい、に設定します▼
  5. 「出発駅」が空白かどうかを判断するためには、先にExcelファイルを参照する必要があるので、グループ化したノードを開いて、Excel操作の2つを分岐グループの外に移動します▼

ウィンドウの指定を調整

  1. 最後にロボットが認識するWebページのウィンドウ設定を行います。
    この操作を行っていないと、ロボットが認識するページが限定的になってしまい、繰り返し操作がうまくいかなくなります▼
  2.  フローチャート画面上部のウィンドウ識別ルールを開きます。
    そして、これまでにターゲットマークで選んできたウィンドウが左部に表示されているので、「「新宿」から「都庁前」への乗換案内-Yahoo!路線情報-InternetExplorer」を選択します▼
    ※料金が表示されているWeb画面です。
  3. このままだと、新宿⇒都庁前で調べたときに出てくるWebページしかロボットが認識してくれません。
    繰り返しが進めば他の駅名での検索も行いますので、この識別ルールを緩めておきます▼
  4. 識別情報のウィンドウタイトルを選択し、「識別方法」を「を含む」に、「文字列」から「「新宿」から「都庁前」」を削除します▼
  5. この操作により、「への乗換案内-Yahoo!路線情報-InternetExplorer」を含むWebページをロボットが認識できるようになりました▼
  6. 最後に、繰り返しごとにWebページのキャッシュが残ってしまわないよう、リフレッシュができるように、ライブラリから「11.ウィンドウ関連」ウィンドウ識別クリアをノードグループの先頭に追加しておきます▼

最後に

WinActorでのロボット開発お疲れさまでした。

実際に開発してみていかがだったでしょうか。

WinActorの特徴としては録画機能で直感的に作れる点が挙げられますが、今回のように繰り返しの作業が必要な場合は「ウィンドウの識別設定」や「分岐、繰り返し」の挿入など、録画機能だけでは対応ができなくなります。

WinActorを用いる際は、録画機能だけで作れるような簡単な業務の自動化が向いています。

また、ロボットを作成する際に画像認識を多用して作成する必要があるので、ウィンドウの大きさが変わったり、Webページの仕様が少し変わってしまうだけでも誤作動を起こしてしまう点は理解した上での開発が必要です。

またエミュレーションモードを利用してしまうと動作が安定しないので、業務でロボットを開発する場合は十分な検証が必要です。

ただ基本的な作業は直感的に行うことが可能で、さくさくとロボット開発を進めることが出来る点は魅力と言えるでしょう。

以上、ご参考にしていただければ幸いです。