PowerAutoMateで写真投稿サイトから写真を名前を付けて保存する

PowerAutomateDesktop

Microsoftが無償で提供するRPAです。

RPAは、操作を記録し、人の手を介さずに自動化します。プログラミングの必要がなく、音声レコーダに音声を記録するように、記録ボタンを押すと操作を記録してくれます。RPAは、ロボティック プロセス オートメーション の略になります。

実現したこと

  • 写真投稿サイトよりグリッド上に表示されている投稿URLを取得
  • URLのページに移動
  • ページに表示されている写真を投稿者の名前+タイトルにてダウンロード
  • 上記を指定したページ分ループ処理する

UI要素の取得

記録ボタンを押すと

レコーダが起動します

記録ボタンを押すと

マウス操作が記録できるようになります。

Webページ内の要素を右クリックします。例えばコピーしたい文字があったら、その部分を右クリックします。

すると、要素の値を抽出する事ができます。

上記例にて テキスト:(‘テスト’) をクリックすると、以下のような要素の取得ができます。innertext変数内に「テスト」が記録されます。

Webページの画像を指定する

記録ボタンは画面上部にあります。

記録ボタンを押して、指定の画像を右クリッククリックすると、以下のような要素が取得できます。

画像のURLを取得し、src変数の中に格納できます。

画像のUI要素は、変数srcに入ります。

ダウンロードする

srcに入った要素をダウンロードします。

メニュー HTTP → Webからダウンロード

src変数に入った画像URLを、ダウンロードするURLに指定すると、webからダウンロードできます。また、web要素から取得したテキストを指定して、ファイル名とする事も可能です。

エラー処理

ダウンロードを実行させていたら、写真がアップロードされていないページで、imageのURLが取得できずエラーが発生して停止してしまいました。

エラーが発生したアクションの左下に「エラー発生時」どのような挙動をするか決められる画面があります。

エラー発生時ボタンをクリック

フローを続行し、ラベルまで飛ばす事が可能です。

ラベルを作成しておきます。エラーが発生したときに、ラベルまで飛ばす事が可能です。

URLリンクを取得してリスト形式(データテーブル)に格納

データテーブルというのか、配列というのか、URLを取得してそれをストアする事が可能です。

レコーダーで、Hrefを記録します。HrefはURLのリンク先を表します。

これを複数回繰り返していくと、

OutputDataというデータの塊で保存してくれます。これはループ処理をするときに使える変数になります。

ループ処理 For each

プログラムをかじっている人だったらなじみ深い構文だと思います。For each。これは、リストに格納されている変数分だけ繰り返し処理をしてくれます。

OutputDataにリストされているアイテムを取り出し、CurrentItemに格納します。

CurrentItemページに移動し、ダウンロード処理が入っているSubフローを実行してくれます。

URLから文字列抽出

保存するファイル名に、WordPress投稿ページのarchives番号をURLから文字列抽出して保存します。

変数CurrentItemの中には、ダウンロードしたい写真ページのURLが入っています。その中のアーカイブ番号のみを取得する「サブテキストの取得」を入れました。

具体的には、URLの開始文字の位置から、最後までを取得するというものです。URLはこんな感じです。

https://techlive.tokyo/archives/9411

この9411のみを取得し、変数ArchivesNumに入れます。

テキスト → サブテキストの取得

写真ソースが取得できない時の処理 if

写真が取得できずにエラーが出る、おかしいと思っていたらページ構成がこうなっていました。投稿者の操作ミスで、写真がうまくアップロードできないけど画像タグは入っている状態です。

画像タグのURLを取得しようとするけど、空になっているという問題が発生していました。

取得できないページは、書き込みエラー.txtにURLを追記していくようにしました。

条件 → if

ファイル → テキストをファイルに書き込みます

まとめ

webページに上がってきた大量の画像を、右クリックして名前をつけて保存、その際に、ファイル名にはwebに上がっているテキストにするためにこれもテキストして選択コピー→貼り付けという作業を行うのに、上記手順で自動化できるとめちゃくちゃ楽できます。