0

ライブラリのお裾分けです。
一括シリーズです。
ブラウザ操作です。
指定要素のメンバーのテキストをまるっと取得します。
区切り文字を指定できます。

 

命名

  • ブラウザ操作(指定要素のメンバーのテキストを一括取得)

 

用途

  • tableの列
  • セクション/ブロックの見出し
  • 記事のタイトル
  • 同じ見た目のテキスト
  • 位置に規則性のあるテキスト
    等々
  • ※ XPathの検索で、Enterで順送りしてヒットする要素のテキストが対象

https://winactor.com/questions/question/xpathでヒットする部分の確認方法/

 

経緯

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 count

  textXPath = "//" & parentTag & "[" & i & "]" & elmsXPath

  ' テキストを取得
  Call getText textXPath, text

  ' まだブランクなら(1つめなら)
  If elmsTexts = "" Then

    ' 変数にテキストを代入
    SetUmsVariable elmsTexts , text

  ' ブランクでなければ(2つめ以降なら)
  Else

    ' 変数に次のテキストを連結
    SetUmsVariable elmsTexts , elmsTexts & delimiter & text

  End 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

anothersolution 新しいコメントを投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。