初心者UiPathメモ

# 概要
UiPathの学習を始めました。
通常のプログラミングではコーディングメインなので、本やWeb学習がいいと思いますが、
UiPathに関してはGUIメインでどこにそのボタンがあるのか等、引っ掛かりポイントが多く含まれていることから、動画学習の方が向いていると思います。私は今

https://www.youtube.com/watch?v=sp5ZwFKfh-0

を真似しています。

ちょっと触れてみた感想としては、かなり便利だと思います。これまでにないツールです。
**二つソフトウェアがあった時、二つを連携して使いたい場合特に有効です**。
二つのソフト間でAPI等があれば、その方がいいですがRPAを使えば画像認識やウェブページから自動的にどこをクリック・入力等を非常に簡単に設定できます。これらの操作をPythonで実装する場合、自由度は高いですが再利用性の低かったり、エラーの対処に手間取った長いコードになりがちです（私の場合）。しかし、**RPAの場合簡潔に何をしてるかわかりやすく書くことができます**。

注意点としては、素早い動作（時間に厳しい）を求める作業には向いていません。
動作はゆっくりしていて、各ブロックごと順に丁寧に動作しているように感じます。
さらに、ほぼGUI操作であることから、バージョンアップや別のRPAソフトへの切り替えごとにある程度の学習が必要な可能性があります。
**会社で使うつもりの場合は、どのRPAソフトを使用しているか確認**しましょう。
勉強が無駄になる可能性があります。


# Ctrl+K
変数ボックス内でこのコマンドをすると、新しい変数の代入＋定義＋型指定が自動で行える

# 全角半角入力問題
「文字を入力」を実行する際、全角入力になってしまう問題は「入力をシミュレートする」のチェックボックスを入れれば解決します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/6c905267-318f-f755-ac64-d81700a4ed9c.png)



https://dekiru.net/article/17717/

を参考にしました。通常、キーボード入力をシミュレートしていますが、チェックを入れるとOSレベルで入力をシミュレートされるため問題の解決になるのではないかと思います。

# Android studioを入れていると出るエラー
エラーメッセージがどこか行ってしまいましたが、
エラーメッセージに書かれているAndroid studioのファイルを削除すれば解決します。
Android studioが無事かはわかりません。まったく使っていないので

# Shift + 右クリック
「パスのコピー」の選択肢が現れ、パスがコピーできる
UiPathには関係ないけど、初めて知った。便利

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/a6630dc0-07a5-1824-ba5c-8a0f375d58c3.png)

# Ctr+E,D:コメント化
そのブロックをコメント化・解除ができます。これも便利

# Publish
Publishはメインに設定したプログラムが実行される（デフォルトでは”Main.xaml”内の内容）。
右クリックでメインに設定することもできる。ただし、"Main.xaml"がメインに設定されているときのみ可能。”Main.xaml”からメインを移動させた場合、再度”Main.xaml”をメインに設定してからでないとほかのシーケンスをメインに設定できない。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/5edc45ac-b604-cf5e-c021-326caad37c92.png)

Publishした内容は"UiPath　Robot”ではなく、”UiPath Assistant”で実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/e0053ece-9bc2-2ed8-9457-3d6819cfb506.png)
Publishした内容が自動的に入っている。インストールを行った後、「実行」で動作する。


参考：

https://osana-kakuei.com/%E3%80%90uipath%E3%80%91%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E3%82%B9%E3%82%B9%E3%83%A1/

# 複数のアプリケーションを開く
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/cdaeeacc-e63a-2bcb-d225-57c0a2840026.png)
こんな感じで、2つ並べるだけでも問題なさそうです。


# 画面上の要素があるかどうか

「アプリのステートを確認」を利用するのがおすすめです。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/a01f2bae-f6c7-9e38-8c04-7a4c867c584c.png)

存在するかどうかで動作を変更することができます。

# ホバーとは
マウスを移動させるコマンドです。特にクリックとかはしません


# OCRの方法
難しい・・・
「UI Automation->アプリケーション->テキストを取得」でうまくいかず
「Computer Vision ->CV　テキストを取得」を試してみましたが

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/4d70d9fa-7b0d-6300-6c80-20278d4daef3.png)

これは、Sportyfyの画面で曲名・シンガーを取得する流れです。
うまくいきませんでした。

結果
「UI Automation -> アプリケーション　-> テキストを取得」を使用するのが一番よかった

# Listの使用：コレクションの初期化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/3db20534-f938-1ee1-e004-8dc9be1a6c40.png)
「コレクションの初期化」エラーが発生

```
New List(Of String)
```
の代入（宣言）が必要

### Collection型の追加
「型参照」で
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/beafdc78-a067-bf3b-9458-e091f6972fad.png)
を選択しても
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/913c4d23-ad77-8224-1a20-2c23dafcd6dc.png)
この「一部のジェネリック型を解決できませんでした」と出る方は
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/777311f6-d462-e8fe-1839-5cb7ff1f3033.png)
ここで型を選択し忘れているため出ています。
こんなことではまらないでください（我30分ロス）。

# ドラッグアンドドロップ：クリック位置指定
まず、ターゲットとしてウィンドウを選択し、
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/c5e28b1b-1a29-27ad-0c32-5dfcc97b1123.png)
ターゲットを編集をクリックし
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/ab32d37c-1ad8-b92d-d2a3-d8f72925d55e.png)
表示される緑の点を移動させることで、始点終点を編集できる。

この編集ができるのは大変便利。
但し、ターゲットとしてアプリ自体を選択することが必要な可能性がある。

# 関数化について
UiPathには関数やブロックを複数選択してまとめる機能は存在しない。
しかし、シーケンスにまとめることはできる。
例えば
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/547ab304-885c-9626-ae8b-8c7999b45e9e.png)
このように連続したブロックを
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/3dd34934-3009-fd31-ef62-0e2fc56e5da2.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/f682a95e-61d5-2988-97f5-724561a2209b.png)
のようにシーケンスに突っ込みまとめることで見やすくすることができる。

# ファイル名に特殊文字が入ることによるエラー
https://dynabook.com/assistpc/faq/pcdata2/017598.htm

```
\/:*?"<>|
```
を含んだ文字列はファイル名にできない

-に変換する

```
strFileName.Replace("/","").Replace("/","").Replace("\","-").Replace("/","-").Replace(":","").Replace("*","").Replace("?","").Replace("<","").Replace(">","")
```
でおけ



# 思うこと
アプリ自体を便利にすることは重要だが、そのせいで実現に時間がかかってしまえばまったく意味がない
エラーをよく吐いたり、うまく取得できない要素はあきらめて、基本的な動作に注力することも重要である。
まず、重要な機能を完成させてから付加していく開発が向いていると思われる。
また、それぞれの機能はmainではなく、別のファイルで実験的に検証をして動作を確認してから、すべてをつなげた方が効率的に作ることができると思う。