今回はプログラミング言語を使った開発ではなく、
UiPathというRPAツールを使って交通費を自動で検索するプログラムを作成していきます。
UiPathとは何か?については、別の記事で環境構築と合わせて紹介する予定なので、今回はUiPath Studioがインストールされている前提で進めていきます!
いつも通り全ての手順を書いていくので、同じように作るだけで構築することが出来ます。
では早速やっていきましょう!
作成するもの
まず簡単に、今回作る処理の流れを確認しておきます。
- ワークフロー実行
- 交通費.xlsxを読み込む
- Internet Explorerを開いて、交通費.xlsxのデータを一件ずつ検索する
- 一番料金の安い金額の値を取得
- 検索結果(金額)を交通費.xlsxの「運賃」欄に記載する
①ワークフロー実行
UiPath Studioから実行します。
②交通費.xlsxを読み込む
一行ずつデータを読み込み、処理をしていきます。
③IEで交通費を自動検索
「交通費.xlsx」から取得したデータを使って検索します。
④「料金の安い順」で並び替えた金額を取得
⑤取得した金額を交通費.xlsの「運賃」欄に記入
ここまでの流れをExcelのデータがあるだけループします。
準備するもの
使用するものはこの3つです。
- Excel
- UiPath Studio
- Internet Explorer
Excelのデータは、このような形で用意しておいてください。
作成開始
まずはExcelを読み込むところからです。
Excelアプリケーションスコープ
まずは「交通費.xlsx」を読み込むため、
アクティビティから「Excelアプリケーションスコープ」検索して配置します。
「Excelアプリケーションスコープ」が表示されない場合
アクティビティの「オプションを表示」をクリック→「クラシックアクティビティを表示」をクリック
これで表示されるようになります(^ ^)
クラシック>アプリの連携>Excel>Excelアプリケーションスコープ
「交通費.xlsx」が置いてあるパスを指定します。
範囲を読み込み
使うExcelファイルが決まったら、「範囲を読み込み」アクティビティを使います。
クラシック>アプリの連携>Excel>範囲を読み込み
「範囲を読み込み」が選択された状態で、プロパティから出力の部分を選択して変数を「Table」に指定します。
繰り返し(データテーブルの各行)
読み込んだExcelのデータを一行ずつ順番に処理していくために「繰り返し(データテーブルの各行)」を選択します。
利用可能>プログラミング>データテーブル>繰り返し(データテーブルの各行)
配置した瞬間はエラーのような表示になりますが、「次のコレクション内の各要素」に変数「Table」を指定します。
Tableから一件分を取り出して、いったんCurrentRowの中に入れて使用していくイメージですね。
代入
ここで「代入」アクティビティを使います。
え、何のために?
というと、「交通費.xlsx」にある「出発駅」と「到着駅」の値をこの後の処理で使っていきたいからです。
出発駅:startSt
到着駅:endSt
変数名は、このようにしておきましょうか。
利用可能>ワークフロー>制御>代入
左辺は変数「startSt」
右辺は「CurrentRow(0).ToString()」
変数を定義するときは「Ctrl + K」を忘れずに!
右辺のCurrentRow(0).ToString()を軽く解説しておきます。
CurrentRow(0).ToString()について
CurrentRow(0)とは、今回で言うとA2セルの「千葉」のことを指します。
※データがあるだけループしているので、2回目のループでは、CurrentRow(0)はA3セルの「東京」になります。
イメージ
現在、「交通費.xlsx」のデータは変数Tableの中に入っています。
その中から一行分取り出して変数CurrentRowに入れておきます。
取り出すときは、CurrentRowの0番目、1番目、2番目というように指定していきます。
この考え方で、到着駅も作成しておきましょう!
こんな感じになれば完成です。
ブラウザーを開く
いよいよ、自動化っぽいことをしてきます!
クラシック>UI Automation>ブラウザー>ブラウザーを開く
Yahooの検索サイトのURL「“https://transit.yahoo.co.jp”」を入力します。
文字を入力
手動で検索するときは、以下のような手順を踏みますよね。
- 「出発」欄に出発駅を入力
- 「到着」欄に到着駅を入力
- 「検索」ボタンをクリック
- 「料金の安い順」をクリック
実際に電車賃を検索するときは、
入力欄に駅名を入力して検索ボタンをクリックしますよね。
それと同じことを今からロボットに覚えさせます。
Internet Explorerを起動して「https://transit.yahoo.co.jp」にアクセスしておいてください。
それでは、「文字を入力」アクティビティを配置していきます。
クラシック>UI Automation>要素>キーボード>文字を入力
「ブラウザー内で要素を指定」をクリックします。
ブラウザ内でどこに入力するのか選択できるようになるので、赤枠で囲った範囲が緑色になるように指定してください。
入力する値は、startStです。
到着駅も同じようにendStで作成しておきましょう。
クリック
駅名の入力が終わったら検索ボタンをクリックしますよね。
「クリック」アクティビティを使います。
クラシック>UI Automation> 要素>マウス>クリック
次は「料金の安い順」をクリックしたいのですが、そのためには実際にブラウザで検索をして次の画面に進む必要があります。
ここは手動で、適当に駅を検索して次の画面に進んでおきましょう。
この画面の「料金の安い順」を「クリック」アクティビティで指定します。
テキストを取得
「料金の安い順」をクリックして一番上に表示される値を取得します。
使用するアクティビティは「テキストを取得」です。
クラシック>UI Automation>要素>制御>テキストを取得
取得するテキストをブラウザから選択します。
取得した金額は、後で交通費.xlsxの「運賃」欄に記入して使用するため、変数resultを指定しておきましょう。
セルに書き込み
いよいよ、取得した金額をExcelに書き込んでいきます。
使用するアクティビティは「セルに書き込み」です。
クラシック>アプリの連携>Excel>セルに書き込み
書き込む値は、変数resultです。
変数resultの中には取得した金額が入ってますからね。
ここでちょっと考えなければいけないのが、書き込む範囲です。
今、「”A1″」となっている部分ですね。
金額を入れたい場所は、今回使っているExcelで言うとC列ですよね。
つまり、1回ループするごとに「C1、C2、C3」と1ずつ増えていってほしいです。
ここでは、変数countを新規作成して、ループの最後でプラス1すると言う流れにしておきましょう。
「変数」をクリックしてcountを作成します。
変数名:count
変数の型:int32
スコープ:実行
規定値:2(C2から始めたいため)
それでは、この変数countを「”C” & count」として使用しましょう。
そして、この後すぐcountに1をプラスします。
「代入」アクティビティを使いましょう。
アプリケーションを閉じる
これで一連の処理は完成したので、最後にブラウザを閉じましょう。
ここでブラウザを閉じておかないと、ループする度にブラウザをどんどん開いていってしまうことになります。
クラシック>システム>アプリケーション>アプリケーションを閉じる
以上で、完成です!
しかし、これを実行するとエラーになってしまうので、解消するところを行なっていきましょう!
エラー解消(その1)
もしかしたら、人によって出てくるエラーが異なるかもしれませんが私の場合次のエラーが出ました。
エラーメッセージから推測すると、「テキストを取得する」と言う部分で何か起きたみたいですね。
ちょっと確認してみましょう。
「テキストを取得する」を行っているのはこの部分ですね。
「セレクターを編集」で詳細を確認してみます。
正直、ここからでは原因がわからないので「要素を選択」で再度選択してみます。
すると、、
修正前↓
修正後↓
微妙に選択できる範囲が違います。
どうやら修正前の選択の仕方はHTML的に読み込めないものだったのかなと思います。
このようにエラーメッセージから該当箇所を推測して、修正してみるといった方法でこのエラーは解消されました!
しかし!!
実行してみると、次のエラーが発生しました。
エラー解消(その2)
処理自体は先に進むのですが、新たなエラーが発生しました。
「title=’「千葉」から「東京」への….’」とありますね。
それが見つかりませんでしたよ。
と言うような内容でしょうか…?
エラーメッセージには「’push button 閉じる’」の箇所で何かが起きているとあるので、
最後に行った「アプリケーションを閉じる」の部分を確認してみましょう。
見てみると、確かにtitleに「千葉から東京」の内容がベタ書きされてますね。
推測ですが、
この「千葉から東京」と言うtitleを持った要素の画面だけを対象にしているから「東京と銀座」の値を使う次のループ時にはエラーになった。と言うことでしょうか…?
今回は「修復」ボタンを押して対処してみます。
改めてブラウザから要素を選択できるようになったので、画面右上の「閉じる(×)ボタン」を選択します。
すると、
なんか、良い感じに更新されたっぽいです。笑
しかもセレクターを見てみるとどうでしょう!
さっきまで、千葉とか東京とか書かれていた箇所が「*」になってます。
何でも入るように自動で調整してくれたのでしょうか…!笑
再度実行してみます。
結果は、、、
来たぁあああ!!
できました!想定通りの結果です!!
まとめ
UiPathはまだまだ初心者なので、このエラー解消法が果たして合っているのか定かではありません。笑
エラーメッセージを見ながら手探りで修正しただけなので、これからちゃんと知識をつけてしっかりしたワークフローを作れるように頑張ります!