【ポチっと実行】投稿されているデータをPower Automateで集約　

# :stopwatch:Power Automateで自動化

皆さん、こんちには。
見た目は細く、心は熱い、はっちと申します。
総務のお仕事をやっています。

今回はPower Automateで「Webにあるデータの抽出」を自動化しているフローを紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836548/72b801a5-b836-ac35-f1e1-0abef840a245.png)


# :file_folder:ダウンロード作業を自動化する
皆さんもそうかもしれませんが、総務のお仕事には集約作業があります。
各部署からの報告内容を集約する作業です。
私の部署ではEdgeから社内サイトへアクセスし、担当者がデータをダウンロードしています。毎回サイトに行っては、約70店舗分のデータをダウンロードしていて、1店舗×5項目あれば350項目を集約しているので、1つの報告フォーマットへまとめるのに**約1時間から2時間**かかっています。
![データが多くてパンクしている.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836548/c5bed3b1-b9e4-04e9-b26d-35a36021b59f.jpeg)

Power Automateを使えば、この作業が楽チンに!
実際に出来た動画がこちら

https://x.com/aeon699/status/1832963715156808031

# :computer:Power Automateのフロー説明
:one:　Edgeを起動するフローを入れる
今回、使用するサイトがEdgeですので、
アクションの中から「新しいMicrosoft Edgeを起動する」をフローに入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836548/fed379a2-3454-8452-1bf8-b8145d7a48e9.png)
上記のような図が出て来るので、初期URLのところに、アクセスしてほしいサイトのURLを入れます。

:::note warn
URLの中に、%が入っている場合は、**%%に置換しないとエラー**になりましたので、ご注意下さい。
:::

:two:　クリックして欲しいところのフローを入れる
Webページのクリックを押しても良いですが、
Power Automateに**レコーディング機能**があるので、記録を押し、いつも通り作業すればフローを勝手に作成してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836548/2109115f-2eed-30a0-d301-219fe620df57.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836548/8f94a9bc-7151-e89b-64fc-1db502588cba.png)
上図のような赤枠が、それぞれ出て来ますので、この部分をクリックするとフローが出来上がります。


<details><summary>出来上がったRobinコード（アクセスしたURLは社内サイトで、その部分は編集していますので、そのまま貼り付けても出来ません。ご注意下さい。）</summary>

```ruby:Robinコード
# ステップ1: Microsoft Edgeを起動し、指定されたSharePointのURLにアクセスします。
WebAutomation.LaunchEdge.LaunchEdge(
    Url: "https:ここが社内URLですので、消しています。アクセスしたいURLを付けて下さい...",
    WindowState: WebAutomation.BrowserWindowState.Normal,
    ClearCache: False,
    ClearCookies: False,
    WaitForPageToLoadTimeout: 60,
    Timeout: 60
)

# ステップ2: ウェブページ上の指定されたテキストやリンクをクリックします。これはアイテムを選択するアクションの可能性があります。
WebAutomation.Click.Click(
    BrowserInstance: Browser,
    Control: appmask['Web Page']['Idiomatic text 2'],
    ClickType: WebAutomation.ClickType.LeftClick,
    MouseClick: True
)

# ステップ3: ウェブページ内の別の要素（パネルやボタンなど）をクリックします。
UIAutomation.Click.Click(
    Element: appmask['Window']['Pane TopContainerView'],
    ClickType: UIAutomation.ClickType.LeftClick,
    OffsetX: -102,
    OffsetY: 12,
    MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.TopRight
)

# ステップ4: 別のリンクまたはページの要素をクリックします。次のナビゲーションステップの可能性があります。
WebAutomation.Click.Click(
    BrowserInstance: Browser,
    Control: appmask['Web Page']['Idiomatic text 3'],
    ClickType: WebAutomation.ClickType.LeftClick,
    MouseClick: True
)

# ステップ5: 「ダウンロード」ボタンまたはリンクをクリックし、ファイルをダウンロードします。
WebAutomation.Click.Click(
    BrowserInstance: Browser,
    Control: appmask['Web Page']['Span \'ダウンロード\''],
    ClickType: WebAutomation.ClickType.LeftClick,
    MouseClick: True
)

# ステップ6: ダウンロードが完了するまで2秒間待機します。
WAIT 2

# ステップ7: キーボード入力をシミュレートします。おそらくタブキー操作やブラウザ内の移動のためです。
MouseAndKeyboard.SendKeys.FocusAndSendKeysByInstanceOrHandle(
    TextToSend: '{LMenu}({Tab})',
    WindowInstance: Browser
)

# 自動生成されたアクションの終了

```

</details>

# :calling:出来上がったものを見てもらう
職場の皆さん（自部署以外にも、となりの部署にも聞いてみて約15名）に作業風景の動画を送って、こんなことが出来るので、Power Automate使いませんか？と尋ねてみました。
皆さんの反応は…

:::note
・こちらが行う作業は、提出状況の進捗をするだけになるので楽ですね！
・毎月ロボット的な集計業務があるので、どうにかならないかと思っていました。相談していいですか！？
・集計作業が短縮できるのは嬉しい。未投稿の部署を抜粋することが出来ると、さらに良いです。そういうことも出来ますか？
:::
っと、すごい嬉しい反応が！
未投稿の部署を抜粋するやり方は、「私のスキルが追いついていないけれど、ダウンロードしたデータを１つの集計表に転記して作成することも自動化出来るので、そのようなことも出来ると思います。」と返答。Power Automateのスキルが全然まだないので、このような返答になっていしまいましたが、周りの方々の前向きな返答に少しでも応えたいと思いました。

しかしながら、実現が難しいかなと思う意見も

:::note warn
・システムに入るには、ワンタイムパスワードが必要なサイトもあるのですが、これも自動化出来そうですか？

⇒ワンタイムパスワードは毎回変わるので、難しいかも。とお伝えしました。
:::
あんまり…という意見も

:::note alert
・ダウンロードしなくても、ライブラリからエクスプローラーで開けばいいのでは？
・Power Automateで出来そうな業務が思い当たりません。


⇒Power Automateの良さが伝え切れていないと思ったので、他にもこういうことが出来ますと分かりやすく伝えるべきだと思いました。
:::

# :raising_hand:周りもPower Automateを試してもらう
嬉しい反応をして下さった方に、早速Power Automateをインストールしていただき、その人の集計作業を自動化する設定を行おうとしました。
データが投稿されているサイトまで勝手に自動化するところは上手く行きましたが、
投稿されているデータを選択するところ、**ダウンロードするところの設定がエラー**となりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836548/9f2d1286-1aec-6e37-7cc9-68a45cbe81a2.png)


クリックする場所を変えたり、レコーディング機能を使ったりして、エラーの解決を図りましたが、上手く行かず…
事前設定することに時間がかかり、結果として出来なかったので「もういいです。」ということになりました。
せっかく期待をして下さったにも関わらず、残念な結果となってしまいました。

# :pencil2:反省と今後について
:one:私のスキルが足りずに出来なかったという点
初めてPower Automateを使っているので、エラーの内容が何なのか、私に詳しい知識がなく失敗してしまいました。
:two:エラーになるとなぜそうなるのか原因を確認して、エラーにならないように修正案を試すこととなり、その間その方は待ってもらうことになってしまった点
すぐに解決する内容なのかやってみないと分からず、レコーディング機能を使えばすぐに解決すると思ったのですが、クリックする場所を認識してもらえませんでした。

今後はやりたい内容をお伺いして、まず持ち帰り、自分でフローを作成してから、エラーが出ない状態を確認した上で、上手く行ったフローをコピーしてその人に渡すという方法に変えようと思います。

そうすれば、待たせてしまうことが無いと思います。将来的には部署の皆さんが、フローを理解出来るようにしていかないとダメだと思っていますが、まずは周りの方もPower Automateを使って自動化する作業を増やすことが先決だと思いました。
「パソコン操作自動化」は周りも期待をしているので、今回で諦めずに試行錯誤を重ねたいと思います。

# :video_camera:※更新　ダウンロード出来るようになりました
あの後、**UI要素のエラー**に関して調べていると、ダウンロードが出来ました。

https://x.com/aeon699/status/1833510138864668998

もし、UI要素でエラーになっている場合は、該当部分のUI要素を追加・削除して変更すると上手く行きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836548/b5aabf6a-e494-37cc-7d01-80f8849997af.png)

:computer:参考にしたURLはこちら

https://asahi-robo.jp/blog/power-automate-desktop/

https://www.teijitaisya.com/pad-ui/

今回、お願いされたサイトでは、一括でダウンロード出来るボタンがなく、
一つずつエクセルファイルを選んでダウンロードすることになりました。
クリックのフローが多いと、設定場所を間違えやすく、エラーが起きやすいことが分かりました。
まだ、分からない部分が多くありますが、改善し続けたいと思います。