八百万-やおよろず-雑記。

八百万-やおよろず-雑記。

日常の様々な事象(主に健康、ライフハック、PC、雑貨、ネットビジネスなど)について、nyanco! スタッフがお役立ちの精神で書き連ねていくブログです。

【UiPath】RPAで自動化。複数分岐も。初心者でもできた。

f:id:nyanco696:20180910223813p:plain

nyancoです。

今回はUiPathという自動化アプリケーションについての備忘録です。

2018年10月頭らへんに自動アップデートされて、18.2.4 → 18.3.0 になってから、今まで使えていたものが使えなくなりました。再度作り直したところ、無事に動くようになりましたが、頻繁にこんなアップデートされると辛いですね。。

UiPathとは?

RPA(Robotic Process Automation)という、単純な作業は人間ではなくロボット(物理的なロボットではなくソフトウエア的なロボット)にやらせようという素敵な自動化テクノロジーを実装できるWindows用のアプリケーション。
単純な作業と書きましたが、条件分岐なども可能なのでかなり複雑な作業も正確にかつスピーディーにこなしてくれます。
個人ユーザー用のUiPath Community Editionなら無償で使用することができます。

▼下記リンクからダウンロードできます
www.uipath.com

筆者のITスキル

html、cssはそこそこ。
javascriptは既存の簡単なコードを改良するくらいなら可能。
UiPathのスキルはほぼゼロ。
下記チュートリアルサイトである程度基礎は学んだ人向けの記事です。
Tutorial Inc. 株式会社チュートリアル | UiPathではじめるRPA入門 (1) 〜 概要編

自動化させたかったこと

▼とあるwebページの管理画面の略図
f:id:nyanco696:20180910223320p:plain:w500

この略図内の表の6列目のステータスの文字列の内容に応じて何種類かの自動処理をさせたく、組んでみました。
詳しい人から見たら非効率な部分もあるかもですが、備忘録がてら記録しておきます。

1. まずステータスの文字列をGETする

自動化させたい管理画面をGoogle Chromeで開いておく。
※標準ではUiPathはGoogle Chromeに対応していないので、下準備が必要。下記記事を参照。
UiPathでRPAを実践してみる(3) ~ブラウザ操作の基本(データ入力編)~

・新規でFlowchartを作成。
・ステータスの文字列を格納するための変数"status"を作成。Variable typeは GenericValue(20181015修正 UiPathが10月初めにアップデートしてからGenericValueがなくなった?? String 型にしておく)、ScopeはFlowchartに。
・表の一番下の行から処理をしたいので、行番号を格納するための変数"RowCount"を作成。Variable typeは Int32[ 整数 ] 、ScopeはFlowchart、Default は11(表のヘッダーも含めると、一番下の行は11行目だから)。
・ActivitiesのAttach Browserをドラッグ。
ダブルクリック > Indicate browser on screen をクリックして管理画面が表示されているブラウザのどこでもいいのでクリック。これでブラウザがアクティブになる。
・Do の中に Get Textをドラッグ。 ・Get Textの Properties > Target > Selectorに下記をコピペ。

"<webctrl tableCol='6' tableRow='" & RowCount & "' tag='SPAN' />"  

元は、Launch UI Explorerでステータスの文字列をクリックして得られたセレクタ<webctrl aaname='編集中' tableRow='10' tag='SPAN' />を下記のように加工した。
aaname='編集中'は削除。ステータスの文字列で限定させないため。表の列と行で指定する
tableCol='6' : 表の6列目を意味するセレクターを加える
tableRow='" & RowCount & "':表の"RowCount"行目を意味するセレクターを加える
・ Properties > Output > Value に status と入力。
Getしたテキストを変数"status"に格納するという意味

これで、表の一番下の行のステータスのテキストを変数"status"に格納できるはずなので、 ActivitiesのMessage Boxをつなげて Content に status と入れて ステータスの文字が表示されるか確認!

2. 変数"status"の文字列から処理を分岐

変数"status"に入るテキストの種類としては6種類あり、それぞれに処理したいことをまとめるとこんな感じに。

編集中:審査リクエストをしたい
審査待ち:何もしない
審査処理中:何もしない
審査中:何もしない
承認:リリースしたい
販売中:何もしない

このように複数分岐させたい場合は、ActivitiesのSwitchを使うと簡単なのでドラッグして前項のActivitiesとつなげる。
Switchの設定
Expression:status
Add new case でテキスト6種類分を作成。
編集中承認のみにactivityを記入する。

3. 変数"RowCount"の値を減らす

今までの処理は、表の6列目11行目(変数"RowCount"のDefault値)に対してのものでした。
次は6列目10行目に同じ処理をさせたいので、変数"RowCount"の値をマイナス1します。

ActivitiesのAssignをドラッグ、前項のActivitiesとつなげる。
Assignの設定
To:RowCount
Enter a VB express:RowCount - 1

これで変数"RowCount"の値が、Defaultの 11 から 10 になりました。

4. 変数"RowCount"の値が 1 でないか分岐する

これまでの処理を続けていくと、変数"RowCount"の値が 1 づつマイナスされていきます。
変数"RowCount" が 1 になると、それは表の1行目、すなわちヘッダーを表すので、取得したい文字列ではなくなります。
なので、変数"RowCount"の値が 1 でないか分岐する必要があります。

ActivitiesのFlow Decisionをドラッグ、前項のActivitiesとつなげる。
Flow Decisionの設定
Condition:RowCount = 1

False(Conditionで設定した状態でない)の分岐を一番初めに設定したActivitiesのAttach Browserにつなげる。これで、変数"RowCount"の値が11~2までのループができました。

True(Conditionで設定した状態である、つまり変数"RowCount"の値が 1 である)の分岐は次の項のActivitiesへつなげる。

5. 変数"RowCount"の値が 1 だと、次のページへ移動

表の2行目まで処理が完了したら、次のページへ移動して、また表の一番下の行から処理を繰り返したいので、ページ下にある「次のページ」のボタンをクリックする処理を追加します。
ページ遷移するので、ActivitiesのDelayを追加して何秒か待たせるか、Find Elementで最後の方に読み込まれそうなElementを指定しておくと、ネットワークの不具合で読み込み待ちエラーを回避できます。

Recording > Web > Click で「次のページ」のボタンをクリックして、Save & Exit すると、Sequenceというコンテナが生まれているので、前項のTrue分岐とつなげる。

6. 変数"RowCount"の値をリセット

また表の一番下の行、11行目から処理をさせたいので、変数"RowCount"の値をリセットさせます。

ActivitiesのAssignをドラッグ、前項のActivitiesとつなげる。
Assignの設定
To:RowCount
Enter a VB express:11

設定したActivitiesを一番初めに設定したActivitiesのAttach Browserにつなげる。
これでまた11行目から2行目まで同じ処理を繰り返すループができました。

完成!

これで望むものが一応完成しました。
一応とつけたのは、基本永遠にループしちゃうってことです。
実際には、「次のページ」がなくなった時点でエラーで止まるというざっくりなRPAですが、十分です。

まとめ

これまでは同じ処理をUWSCで自動処理させていたのですが、UiPathだと複数分岐が楽で、ページ遷移のエラーも回避できるし超絶に楽になりました。
自動化大好きなnyanco! にとって最高のツールです。
同じように単純作業を自動化計画されている方の参考になれば幸いです。

最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧

//パンくず //トップに戻るボタンの設定
to TOP
//トップに戻るレンジの設定 //アウトバウンド計測