はじめに
この記事はRPA(ロボティック・プロセス・オートメーション) Advent Calendar 2023 12月14日担当分の記事です。
Webページの表の正規化ってなんのこっちゃって方がほとんどなのではないかと思うので例を出します。
Excelなんかでよく話題になるセル結合みたいなことがWebページでも行われていて、そのせいでRPAで表から値を抽出する際のタグの設定がややこしくなったりします。
これを解決する方法がBizRobo!の機能にあります。
※以下、v11.4でのBizRobo!内蔵ブラウザ(Webkit)での動作です。
v10.x系でも存在する機能なので過去バージョンお使いの方もご安心ください。
正規化前の動作
まず、正規化前に各行毎にループを回して最高気温を抽出しようとしたときの動作です。
オレンジ色で囲われた場所がロボットが抽出先として見ている場所です。
1行目は最高気温の場所になっているのが分かります。
ちなみに抽出先の設定は、左から4番目のtdタグを見に行くことになっています。
年、月、日、最高気温、と4番目になるので正しいですね。
しかし、2行目を抽出しようとすると、平均気温を取りに行ってしまいます。
これは、先ほどの1行目は
年、月、日、最高気温、となっていたのに対し、
2行目以降は
セル結合が行われているせいで、2行目以降は年と月の分のtdタグが存在しないことから、
日、最高気温、最低気温、平均気温、と4番目が平均気温になってしまっています。
このままでは、1行目は4番目から抽出し、他の行は2番目から抽出するように設定しなくてはならなくなります。
これはまだマシな例で、途中で結合されている場所が現れたり、現れなかったり、
後にページが更新されてそういう箇所が増えたり減ったりと、その度に設定を見直して複雑なつくりにしなくてはならなくなる可能性があります。
以前、ループ処理にせずに1セルずつ数十個の変数に1つ1つ場所を設定して抽出しているロボットを見たことがあります。
大変な力作でしたが、今回の正規化機能を知っていればそんな苦労もせず保守性の悪くないロボットが作れたでしょう…。
正規化の方法とその場合の動作
正規化の方法とその場合の動作です。
正規化の方法は非常に簡単。
普通にLoad PageでWebページを読み込んでいる状態から、
HTMLタグの欄から対象のテーブルを選び、
右クリックメニュー⇒修正⇒セル結合解除
と選択します。
すると、Normalize Table(セル結合解除)ステップが追加され、
このように結合されていた行すべてが解除され、データが挿入されます。
この状態で抽出処理すると、2行目以降でも最高気温が記載されている順番が変わらないため、最後まで同じ設定で抽出可能です。
まとめ
今回は少々ニッチな機能だったかもしれませんが、知っているのと知らないのでは、同じ状況にハマったときの対処にかなりの差が出る機能だと思います。
現在、内蔵のWebkitブラウザのみの機能で、デザインモードも最小実行モードにしか対応していないため、DA機能との併用はできません。
したがって内蔵Chromiumブラウザで開いたページやDA機能でデスクトップに起動したブラウザに対してはそのままでは使えない機能ですが、まだ使う方法はあります。
同じロボット内では使えませんが、一旦ChromiumやDAで開いたページからHTMLを抽出して保存しておけば、それをWebkitブラウザで読み込むことで今回のようなことが可能です。
使いにくいとかクセがあるとか色々言われることもあるBizRobo!ですが、今回のように内蔵ブラウザ内でHTMLやJavaScriptを改変したり、色々な機能を組み合わせることで便利になることもあります。
特徴をうまく使いこなして楽しく開発・運用していきましょう。