「値の取得」で不要なブロックを除外したい
RPAならではと思しき想定外の状況で深みにハマってます。
困ってるポイントをなるべくスマートにクリアしたいです。
みなさまのお知恵を拝借させてください。
掴みかけた光で、カッコいいXPathが見出せれば理想です。
そもそもそんな表記なんて存在しないのだろうか。
最小限の軌道修正で済めば嬉しいものの、バランスポイントっぽければ泥臭い攻めかたも厭わずです。
どんな手が考えられますか。
★はこれから試すものです。
環境
- WinActor721 or 740
- Chrome9x系
シチュエーション
- ブラウザ操作のシナリオ
- WebDriver制御
- 値の取得
- 複数行にわたる住所
取得したい箇所の見えかた(マウス操作でコピって取得できる値)
〒 000‐0000
□□県□□市□□0丁目 00-0
□□レジデンス0000
- 末尾のスペースも忠実に再現(何かを物語ってそう、引用にすると消えちゃうかも)
ほかのバリエーション
□□県□□市□□00-00
- 号相当のブロックとかがないと、困ってるポイントが露呈する??
「値の取得」のXPath
//td//label[contains(text(),"項目名")]/../following::td//div
- 表内の項目名を手掛かりに、右隣のセルのdiv内の値を取得してる
- 今ならもっとスマートなXPathを書けそうな気がする
- この投稿を機に、みなさまのノウハウを取り込んで、よりスマートにしたい
取得される値
〒 000‐0000 □□県□□市□□0丁目 00-0 - - □□レジデンス0000
困ってるポイント
- 住所と建物名等の間に無用な半角ハイフンが入っちゃうケースがある
- 作成済みのフローで、効率的に除去する方法を見出しにくそう
- 後続処理で使うVBAで全力加工して正規化してて、ハイフンは半角に揃えてるため、この位置に残る半角ハイフンは掴みにくそう
該当箇所のHTMLの例
<div>
<label>〒</label>
<label> 000‐0000 </label><br>
(略)
<label aria-hidden="true">-</label>
(略)
<label>(略)レジデンス0000 </label>
</div>
- ポイントでなさそうな属性の類は軒並み省略
- 住所はdiv内にかぱっと収まってる
- 住所をまるっと1つの変数に取得したい
- 取得したい値はlabel内のtextのみ
「値の取得」後の処理
- 正規表現ライブラリでHTMLタグを除去
- HTMLの一部として改行の<br>も削除される
- 改行の削除前に行末のハイフン(<br>手前のスペースとハイフン)を除去しておく必要があるっぽい(ここが正攻法の核心か)★
掴みかけた光
- 無用な半角ハイフン入りのlabelは、属性と値がaria-hidden="true"で共通してるっぽい
- XPathでこの属性と値の部分を除外した値を取得できれば理想
試行錯誤して掴んだ状況
- ダブルクリックとかトリプルクリックの連打でも、1行ずつしか選択できず
卑近な解決策
- 「画像マッチング」でドラッグ、「クリップボード」経由で変数に格納
- できなくはなさそうだけど、最終手段に取っておきたい
- やむなく採用するとしたら、いくつかの過去ログを参考にしつつ、わたしにとって初めての「画像マッチング」でのドラッグ
今回ググったワード
- aria-hidden="true"で、読み上げの対象外、かつCSSとかで?表示の対象外にもされてる模様
【HTML】aria-hiddenってなに?読み上げスキップ指定の書き方|Web Work Plus
https://webwork-plus.com/content/design/aria-hidden.html
- これまでに、::beforeとか::afterも見かけたことがあった
- 今回のリサーチで、用途が少しわかった気になれた
- 取得してからPython?上でremove?
xpath で除外条件を指定 - dak ブログ
https://blog.goo.ne.jp/dak-ikd/e/48ec995a4f8cb490b839ff1e58033068
- 事後に正規表現ライブラリでHTMLを除去する方法と近そう
- ここは試す余地があるのかも★
xml — XPathでの選択から特定の要素を除外する
https://www.web-dev-qa-db-ja.com/ja/xml/xpathでの選択から特定の要素を除外する/967231184/
別視点
- 「属性値の取得」や「プロパティ値の取得」でvisibleTextみたいな属性/プロパティの値を取得できたりして★