OpenRPAでRPAチャレンジ！

# はじめに
RPAツールを試す際に、必ず最初に[RPAチャレンジ！](https://www.rpachallenge.com/?lang=ja)をやってみることにしています。
この辺りは、初めて使用したRPAツールがUiPathだったことが影響しているのかもしれません。

ちなみに、これまでにRPAチャレンジ！をやってみたツールは、
* UiPath(クラシック)
* UiPath(モダン)
* UiPath StudioX
* Power Automate for Desktop
* Automation Anywhere
* WinActor
* Coopel

です。そして今回、OpenRPAを使って、RPAチャレンジ！をやってみました。

Coopelでやったときの記事

https://qiita.com/kou1209/items/42df73283f156692b505

Coopelの記事を見て、@cr_muraiさんがクラウドBOTでチャレンジした記事

https://qiita.com/cr_murai/items/e60fce6f63d05f7bf75c

# OpenRPAとは？
OpenRPAはオープンソースのRPAソフトウェアです。
そしてUiPath~~のパ〇リ~~と非常に似たユーザインタフェースをしているため、UiPathを使ったことがある方だと簡単に操作することができると思います。
OpenRPAの概要やインストールについては[こちら](https://thinkit.co.jp/article/21583)が参考になると思います。

# RPAチャレンジ！とは
RPAチャレンジは、以下のような画面に対して、Excelファイルに格納されているデモ用の顧客データを登録していくというものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/2b445857-a2b6-caf6-42fd-77a93eb3b5d1.png)
Excelはこんなものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/b3d015c5-ca9b-1bb6-0ae4-2b2a68034eab.png)
見ての通り、簡単な処理なのですが、RPAツールにおける3つの基本的なことが学べます。
* Excelからの読み込み
* ブラウザを介した画面操作
* 繰り返し処理

そして、このブラウザを介した画面操作に、色々な罠が仕掛けられているのが、このチャレンジの面白いところです。

# Excelからの読み込み
まず、Excelからデータを読み込む部分を作ります。

## 範囲を読込
Excelからデータを読み込むには、「範囲を読込」アクティビティを使用します。
今回設定したプロパティは、以下の4つのみです。
1. Filename(ファイル名)
    読み込みたいExcelのパスを指定します。

2. Worksheet(シート名)
    読み込みたいシート名を指定します(1シートしかない場合は省略可能？)。

3. ヘッダー行を使用
    1行目をヘッダー行として使用するので、True(デフォルト値)。

4. DataTable(データテーブル)
    読み込んだデータを格納するDataTable型の変数を指定します。

他にも色々とプロパティがあるので、格納されているデータに応じで試してみると良いかもしれません。

これでExcelからデータを読み込む処理は完了です(めっちゃ楽)。
ちなみに既にExcelが開かれていれば、それを使ってくれます。
また、開かれていなければExcel起動からやってくれます。

# ブラウザを介した画面操作
ブラウザを操作する部分を作ります。

## サイトを開く
まずは、RPAチャレンジサイトを開きます。
使用するのは、「URLを開く」アクティビティです。
今回はchromeで実行するので、OpenRPA.NMの「URLを開く」を使います。
chromeでRPAチャレンジのサイトを開いた状態で、「カレントを取得」をクリックすれば、Browser(ブラウザの種類)とUrlを自動で設定してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/625c60d8-a807-e15c-ad09-d7eb5e8a80fa.png)

## 開始ボタンのクリック
サイトが開いたら、「開始」ボタンをクリックします。
ボタンのクリックには、「要素をクリック」アクティビティを使用するのですが、ボタンを指定するセレクタを設定する場所がありません。ここがOpenRPAの特徴的なところだと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/d6f92cad-cbd1-da2b-aa03-b3a54c30f405.png)
要素を指定するには、「要素を取得」アクティビティを使います。chromeで使うのでOpenRPA.NMの「要素を取得」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/0c99f046-6146-269f-17d1-922a09aa14d1.png)
「セレクタを開く」をクリックすると、セレクタを設定できる画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/66e3832f-cb5e-31d7-d947-f3e5a7eb9a26.png)
「選択」をクリックすると、要素を選択できるようになるので、開始ボタンを選択(ボタンが薄い緑色になる)し、クリックすると、セレクタが取得でき、「OK」をクリックすれば、設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/92aad95f-7009-83e2-35c2-01082278b152.png)

「要素を取得」アクティビティは、中にアクティビティを入れ子にすることができるようになっていて、お察しの通り、「要素をクリック」アクティビティをこの中に入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/ed6b9001-3215-b17b-faee-1670df893c90.png)
これで、開始ボタンのクリック処理は完成です。

## 各項目に値を設定
次に、各項目に値を設定します。
画面の入力項目に値を設定するには、「テキストをタイプ」アクティビティを使います。
こちらも「要素をクリック」と同様に、セレクタ情報を持っていないので、「要素を取得」アクティビティで囲みます。

:::note warn
これだけでイケると思ったのですが、実行したところ、画面に入力値が設定できませんでした。同様に動かない場合は、「テキストをタイプ」アクティビティの前に、「要素をフォーカス」を設定してみてください。私はこれで動くようになりました。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/efadf571-e81b-0258-037d-2ce6e1db0ff0.png)
設定する値は、一旦ダミーで"あいうえお"としています。
これを画面にある各項目ぶん作成します。値はそれぞれ別のものを設定した方がよいです。

## 登録ボタンのクリック
登録ボタンのクリック処理は、開始ボタンのクリックの手順と同様なので割愛します。

# 繰り返しの中で処理する
Excelから読み込んだ行ごとに繰り返しを行います。
使用するアクティビティは、「DataRowの各行に対して実行」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/901c684f-1fad-42fa-fe59-43ee3099c01f.png)
inには、Excelから読み込んだ時のDataTable型の変数「データ」を指定します。

あとは、先ほど各項目に値を設定する処理の部分を、繰り返しの中に入れ、設定するテキストを、
`row("苗字").ToString`のように書き換えます。先頭行をヘッダーとしていたため、"苗字"という指定で対象列のデータを取得することができます。

# 実行
実行すると、正しく実行することが確認できました。しかも、結構いい速度です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/6960123e-2f4c-65f0-1b36-2a72735a2091.png)
ちなみに、実行時に以下のような問題が発生しました。
* ブラウザよりExcelが前面にあると、Excelに値が書き込まれた。
* 全角モードになっていると正しく入力できない。

# クラウドから実行
OpenRPAは、クラウド(OpenFlow)から実行ができます。
こちらも無事に実行できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/e7cb2f8e-647e-3907-73d5-c1a08897a17e.png)

# まとめ
オープンソースRPAツールであるOpenRPAを用いて、RPAチャレンジを実施してみました。
* Excelからのデータ読込
* ブラウザ操作
* 繰り返し

を行うのに数種類のアクティビティを紹介しながら作成しました。
オープンソースでここまでできるっていうのに、正直驚きました。