ansan
1
WebアプリからWEBページ内のチェックボックスにチェックを
つけるRPAを作成しています。
チェックボッスクにチェックするだけなら、Check 'INPUT’を利用すればよいのですが、
対象のページが動的に作成されており、target selectorに設定すべき値が日によって、
変化するので、狙ったチェックボックスにチェックをつける事ができません。
よい方法があれば教えてください。
よろしくお願いします。
・実施したい事
日本の内容をチェックしたい
selectorの内容
webctrl name=‘Menu_0’ tag=‘INPUT’
<上手くいくパターン>
webページ ソース
value="#Menu_0 “>日本
value=”#Menu_1 “>米国
value=”#Menu_2 “>中国
value=”#Menu_3 “>韓国
value=”#Menu_4 ">英国
<上手くいかないパターン>
webページ ソース
value="#Menu_0 “>英国
value=”#Menu_1 “>米国
value=”#Menu_2 “>中国
value=”#Menu_3 “>韓国
value=”#Menu_4 ">日本
Honoka
(Honoka Hayasaka)
2
悩ましいですね。
自動レコーディングのセレクターだと、多少手を加えただけではどうにもならない感じです。
1つ、考えついた方法で、
- 対象のInput要素が並んでいるあたりを、まとめてGet Textで取得する
- Get Textをスペース等を仕切りにして分解する( “日本” “米国” “中国” ……のように要素が配列になる)
- 上記で取得したindexをselectorの一部とすることで、狙った番号の要素をクリックする
みたいな感じです。
サンプルをつけておきますので、参考にしてみてください。
(対象のWebページのデザインによっては、もうちょっと別の方法を考える必要がでてくるかもしれません。Find Textして、そこから「数ピクセル左にずらしてクリックする」みたいな方法、など)
find_text.zip (2.6 KB)
ansan
3
Honoka さん
ありがとうございます。
早速試してみます。
Yoichi
(Yoichi)
4
こんにちは
Relative Element使うのがClick Activity一つで片付きますので、手っ取り早いと思います。(SelectorでNAVを使います)
元のHTMLがどのようなものかわかりませんので、ヤフー路線( https://transit.yahoo.co.jp/ )での空路のチェックボックスをクリックする例を添付します。(IEでヤフー路線を開いた状態で実行してください。)
空路というコンテントのLABEL要素の一つ上位のCHECKBOXタイプのINPUTタグをクリックさせています。
RelativeElementSample.xaml (5.3 KB)
上記Selectorでの操作以外にもAnchorBase Activityを使ってもできると思います。
Yoichi
(Yoichi)
5
たびたびすみません。
チェックボックスの内容取得でしたらGet Attribute Activityですね。サンプル再度upします。
RelativeElementSample.xaml (5.3 KB)
Selectorの考え方は同じです。
Honoka
(Honoka Hayasaka)
6
この件で難しいところは、元のトピックにあるHTMLだと、LABELで引けないのです。
それ以前に、
<input type="checkbox">なにか文字列</input>
というHTMLの、「なにか文字列」の部分を正確に取得できるセレクタは、現状(2018.2.2で確認)では構築できない、ということに起因する問題だと思います。
Yoichi
(Yoichi)
7
なるほど、そのようなソースであればRelative Elementは難しそうですね。
Honokaさんのサンプルのようにいったん配列やリストに入れて処理するか、
Click Text Activityで位置をオフセットしてクリックするかですね。
ClickTextSample.xaml (6.2 KB)
Yoichi
(Yoichi)
8
@ansan @Honoka
度々のポストご容赦ください。
Selectorの指定方法をUI Automation表記にしてやれば、上記ケースもSelectorとして取得できました。
これを使えばRelative Elementを用いてクリックやチェックの有無取得ができるかもしれません。
以下HonokaさんのサンプルHTMLでのサンプルコードです。(日本語IE用)
RelativeElementSample3.xaml (5.1 KB)
#なおSimulate Clickは効かない模様です...
1 Like
Honoka
(Honoka Hayasaka)
9
なるほど、Browserでなくアプリケーションとして動作させれば良いのですね。勉強になります。
Simulate Clickは効かない
これはおそらく、ブラウザ側がアクセス制御でWin32を用いたクリック等の処理は、かなり厳しく弾いているから、というOSとIEの制限に起因するものだと思います。
マルウェア等からブラウザが操作できてしまうと、それはそれで色々と困りますからね。
なので頑張ってブラウザの保護機能を片っ端から無効にすれば、Simulate Clickでもいける、かもしれません。が、間違っても推奨される使い方ではないでしょうね。
少し古い記事ですが、
IE10 & IE11 : 拡張保護モードの実態 - Japan IE Support Team Blog
この辺がなんとなく理由として見えてきます。
Yoichi
(Yoichi)
10
何度もすみません
先ほどのサンプル、米国を指定しても日本にチェックが入ってしまうので動作的にはよろしくないようです。
Anchor Base Activityなら大丈夫そうなのでこちら添付しておきます。
RelativeElementSample4.xaml (6.4 KB)
なおこのサンプルはBackgroundや表示範囲外でうまく動作しません。
上記を考慮しますと、やはりHonokaさんのサンプルのようにまずはGet TEXTなりFORMのaanameなりから文字列を取ってきてリスト化し該当チェックボックスを叩きに行くほうが(ロジックの複雑さはありますが)良さそうです。Foreground動作+該当部分の画面表示が保証できる(あるいは強制的にそうする)ならUI Automation表記でのAnchor Base、画面レイアウトや解像度、フォントの変更等が将来的にも無いようならClick Text +座標オフセットといった選択肢も検討といった感じでしょうか。