HTML Paserで連続ダウンロード


はじめに

Automation 360の「ブラウザ/ファイルをダウンロード」は1個のファイルをダウンロードします。
ダウンロード用Webページに複数の落としたいファイルがあって、それらを全てダウンロードするときはループさせなければならない。
ダウンロードファイルのURLが規則的な名前になっていたらいいですが、そうでない場合ちょっと面倒。
そういった場合、HTML Paserパッケージを使うと楽に実現できる場合があります。

郵便番号データを落としてみる

サンプルとして以下から郵便番号データ(zipファイル)をダウンロードします。
https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

大まかな流れは以下。
(1) 郵便番号データのWebページを表示。
(2) WebページのHTMLを読み出す。
(3) 読みだしたHTMLをHTML Paserにかけてダウンロードファイルの一覧をリスト変数で作る。
(4) リスト変数をループさせ、その中でファイルダウンロード。

先に完成品のイメージをつけておきます。

HTML Paserの入手

HTML PaserはAutomation 360に標準で入っていないためBot Storeから入手します。
https://botstore.automationanywhere.com/bot/a2019-html-parser-package

Automation Anywhere社が提供しているもので無償です。

HTML Paserの使い方

HTML Paserパッケージにはいくつかのアクションがありますが、ここではSearch with Selectorを使いました。

変数\$prompt-assignment\$には「ブラウザ: ソースコードを取得」を使い、WebページのHTML全体を読み込んでいます。

ブラウザ上で「右クリック/ページのソースを表示」して、HTMLソースを先に見ておきます。

ダウンロードしたいzipファイルは、
<tr class="arrange-c">タグの下の<td>の下の<a>タグで定義されている事がわかります。
このとき、Search with SelectorアクションのSelector欄で以下のように指定します。

tr.arrange-c>td>a

また、List of Elements of type Dictionary欄に解析結果を出力するリスト変数を指定します。
これでSelector欄の条件にあったタグの情報がリストに入りますのでループで処理できます。
ここではparseListという変数に格納しています。

ループ処理

ループでparseList変数の各項目に対して回します。このとき、「現在の値を変数に代入」で辞書変数を指定します。ここではListItemDicとしています。

少し難しいのはListItemDicはディクショナリ(辞書)形式になっている点です。
検出した箇所全体はhtmlというキーに入っています。すなわち\$ListItemDic{html}\$です。
例えばループの最初では「<a class="inline" href="kogaki/zip/01hokkai.zip">北海道</a>」が入っています。
\$ListItemDic{html}\$から「文字列: テキストを抽出」を使いzipファイルをURLを作り、それを「ブラウザ/ファイルをダウンロード」にかけたのが一番最初の画像です。

ちょっとしたハマりどころ

  • 「ブラウザ: 開く」と「ブラウザ: ソースコードを取得」の間に遅延入れておかないと、ソースコードを取得でエラーになりやすい。
  • 「ブラウザ: ソースコードを取得」はChomeしか使えない。

さいごに

ここまで書いておいて今さらですが、
こういうのって、いわゆる「ダウンローダー」を使った方が楽かもしれません。

何でもかんでもRPAでやるのではなく、適材適所で柔軟にやりましょう。