RPAというと一般的にはロボットが人間の定型作業を"代行"してくれるもの、なのでロボットのPCは人間の使うPCとは別に用意されていて、非定型な作業を行う人間と定型作業を行うロボットが分業体制にあるのが普通だと思います。
ただそればかりじゃ面白くない。分業じゃなく、一緒に作業したりロボットに支援してもらうような"共存"の形がとれたら面白いと思うのです。共存ロボシリーズ1回目のお題は・・・
今回のお題:ロボットに広告を消させる
こういう広告見たことありません?企業/個人の問わずブログ広告で目にします。
一生懸命調べ事をしている最中にこんな広告が頻繁に出てくると集中できないし、特に右側のなんて会社で出てきたら気まずいでしょ。というか既になった。
今回は、人間がそんな思いをせず快適に調べ事ができるよう、常にブラウザのページを監視して広告を自動で消してくれるロボットをUiPathで作ってみようと思います。
(AdBlockのアドオン入れればいいじゃん、とは言わないで)
Set Web Attributeで広告の幅と高さを0に
広告を消す事自体は難しくありません。Set Web Attributeアクティビティで、その広告オブジェクトの幅と高さを0にしてやれば非表示になります。問題は、ページ内に複数存在する広告オブジェクトをどのように拾い集めてくるかです。
とりあえずUiExplorerでいくつか広告オブジェクトのSelectorを覗いてみる。
[id=google_ads_iframe]がキーワードになりそうです。
続いてChromeならF12または右クリック→検証でHTMLソースを確認。
width、height、styleあたりのAttributeをいじくれば消せそうです。
というわけで方針決定。
[id=google_ads_iframe]のSelectorにひっかかったオブジェクト1つ1つについて、Set Web Attributeでwidth、height、styleを変更します。
Selectorでまとめて取ってくるならFind Children
指定した条件にひっかかるオブジェクトをまとめて取得したい場合、画像認識ならFind image matches、SelectorならFind Childrenを使います。今回はSelectorなので後者。
ちなみにFind Elementは単一のオブジェクトしか取れません。そしてなぜかFind Element"s" は無いのでFind Childrenを使うしか無いのですが、このアクティビティはちょっと変わってます。
Find ChildrenはSelectorとFilterの2つで対象を掴みます。まずSelectorで大枠、例えばページ全体とかテーブル全体を掴んで、その中でFilter条件に合うUiElementを配列にして返します。だからFind Children。
今回の例だとこうなります。Chromeで開いているページ全体をSelectorで、さらにその中にある広告オブジェクト(id=google_ads_iframe)をFilterで抽出して取り出します。
Find Childrenで取り出したUiElement(広告オブジェクト)に対し、1件ずつSet Attributeでwidth, height, styleといった項目を操作して非表示にします。
ポイントとして、該当する広告オブジェクトが無いページだとFind Elementが対象を見つけられずエラーになるので、Try-Catchで包んでエラーを握りつぶします。これでオートメーションが止まらずに済みます。
あとは開いているページのURLが変わってないか定期的に調べて、変わっていたら即座に広告を消しに行く、というのをループさせれば完成です。
できた
オートメーションをスタートさせると、こんな感じでページ内の広告を検出して消しにいってくれます。(今回はわかりやすく見せるため、あえてハイライトのつくデバッグモードで実行してます)
今回はここまで。
UiPathの普及とともに色んな方が情報を公開してくれるようになったので、それと被らないネタを・・・と考えているうちに投稿が滞ってしまいました。
今後も少しずつですが投稿続けていきたいと思ってます。