要素のメンバーを一括取得してみた
ライブラリのお裾分けです。
一括シリーズです。
ブラウザ操作です。
指定要素のメンバーのテキストをまるっと取得します。
区切り文字を指定できます。
命名
- ブラウザ操作(指定要素のメンバーのテキストを一括取得)
用途
- tableの列
- セクション/ブロックの見出し
- 記事のタイトル
- 同じ見た目のテキスト
- 位置に規則性のあるテキスト
等々 - ※ XPathの検索で、Enterで順送りしてヒットする要素のテキストが対象
経緯
https://winactor.com/questions/?q=ChromeのシナリオでtableのouterHTMLを取得したい
- td > span > textareaのテキストも取得したい
- Excelみたいに列をまるっと掴む方法
ベースライブラリ
- 要素数取得
- 値の取得
ほぼ同じ発想で作った一括シリーズ
https://winactor.com/questions/question/chromeのシナリオでtd内にあるラジオボタンオンの値を/
https://winactor.com/questions/question/excel操作指定範囲を区切り文字列で連結した値の取/
スクリプト
' 設定
elmsXPath = !要素グループのXPath!
parentTag = !要素の親タグ!
delimiter = !区切り文字!
elmsTexts = $取得したテキスト$’ 要素グループ内の要素数取得
Call countElms elmsXPath, count' 変数をリセット
elmsTexts = ""' 要素数分を繰り返し
For i = 1 To counttextXPath = "//" & parentTag & "[" & i & "]" & elmsXPath
' テキストを取得
Call getText textXPath, text' まだブランクなら(1つめなら)
If elmsTexts = "" Then' 変数にテキストを代入
SetUmsVariable elmsTexts , text' ブランクでなければ(2つめ以降なら)
Else' 変数に次のテキストを連結
SetUmsVariable elmsTexts , elmsTexts & delimiter & textEnd If
Next
' 要素数取得
Sub countElms(elmsXPath, count)
'「要素数取得」スクリプトのボディ部のみ
End Sub' 値の取得
Sub getText(textXPath, text)
'「値の取得」スクリプトのボディ部のみ
End Sub
注釈(案)
要素グループのXPath:
メンバーがまとめてヒットするXPath要素の親タグ:
要素を束ねるタグ区切り文字:
取得した複数のテキストを連結する文字列取得したテキスト:
テキストを格納する変数
作成後期
- 実質10行スクリプト
- ラジオボタンオンのスクリプトがほぼそのまま使えた
- 良い復習になった
- 前提事項等は、適宜該当スレッドを参照
https://winactor.com/questions/question/chromeのシナリオでtd内にあるラジオボタンオンの値を/
- 要素の親タグも実際はXPathの一部として使っている
- [@属性="値"]まで添えないとヒットさせられない(一意に定まらない)ケースもあるのかも
試したサイトと設定
- ユーザーフォーラム
https://winactor.com/questions/?ap_sort=unanswered
//a[@class="ap-questions-hyperlink"]
div
- FAQ
https://winactor.com/faq_winactor/
//h3
li
- ナレッジ
https://winactor.biz/knowledge/?s_ch_p_23=ブラウザ関連
//h3[@class="p-knowledge-item__desc-tit"]
li
- 主要トピックス一覧 - Yahoo!ニュース
https://news.yahoo.co.jp/topics/top-picks
//div[@class="newsFeed_item_title"]
div
- html input「フォーム(formタグ)の中で、入力箇所やボタンを作る」 | WEPICKS!
https://wepicks.net/htmltag-input/
サンプルhttps://wepicks.net/code-example/html/input.php
//input[@type="text"]
tr
- <TABLE>-HTMLタグリファレンス
http://www.htmq.com/html/table.shtml
//td[2]
tr
tableの行をまるっと取得したい場合の深掘り
//tr[2]/td
- カウントアップさせるべきは末尾にあるtdのposition、、
//tr[2]/td[i]
- 現状のスクリプトは親側をカウントアップ対象にしてある
- カウントアップさせるpositionを親側と子側の選択式にすればきっと両対応になり得る
- あるいはXPathさえ工夫すれば、同じスクリプトのままでもいけちゃうのだろうか、、
- わたし自身の業務でニーズが出てくるか、リクエストがあり次第検討するかも
- このしくみを試した範囲は、要素の親タグ側のカウントアップで良かった
- tableの行は子タグ側のカウントアップが必要
- 限りなく唯一に近いレアケースなのか、ほかにもそれなりにあるのか
そもそも、、
- 行のXPathで行をまるっと掴める訳で、、
- 行の値を取得して、正規表現でHTMLタグを区切り文字に置き換え、行頭と末尾の区切り文字を削除
- このほうが効率的か
- テーブルスクレイピングって、確かこれの全行繰り返し+ページ数分繰り返し版だったような、、
正規表現さえ使わなくて済むかも、、
- 全行取得してから必要な行番号の行だけ拾えば良い
- tableの行trは、こうするのが低コストっぽい
テーブルスクレイピング or 表の一括取得
テキストファイルの指定行を読み込むライブラリ
https://winactor.biz/library/2018/11/09_435.html