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でやるのではなく、適材適所で柔軟にやりましょう。
Author And Source
この問題について(HTML Paserで連続ダウンロード), 我々は、より多くの情報をここで見つけました https://qiita.com/etoootak/items/28920b9cba179161227d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .