0

※ 進展があり、現在は最下部の太字の状態です。

 

tableの同じtd内にある、同グループのラジオボタンオンの値を取得したいです。
ラベルかValueです。
お知恵を拝借させてください。

後追いで、チェックボックスも同じように取得したい。
2つ以上のチェックがオンなら、値をたとえばカンマ区切りで格納したい。

 

把握してること

  • 「チェック状態取得」でtrue/falseを取得できる

気になるポイント

  • 項目の値が何だったのか、取得したtrue/falseの値から割り出さなければならない
  • 取得したいのは項目と対になる値1つなのに、ラジオボタンの数だけ変数を消費しちゃう
  • 前後で使い回し用の変数を登場させる工夫で、変数の消費は項目数+1に抑えられそう
  • ラジオボタン/チェックボックスはそれなりに広範囲にある
  • 工夫をサブルーチンにすれば抵抗感は和らぐのかも

 

既に試したこと

  • 「値の取得」でValueの値、onとか0とか1が取得された

気づき

  • Copy XPathしたままだと、ラジオボタンのチェック状態が加味されず、目的に使えない

 

到着のラジオボタンを予めオンにして検証

Yahoo!路線情報
https://transit.yahoo.co.jp/

//*[@id="tsArr"]

ラジオボタングループ、name="type"のXPath

//*[@id="default"]/dd/ul

攻略の一案

  1. 「チェック状態取得」がTrueになるまでラジオボタングループを「カウントアップ」しながら「繰り返し」
  2. Trueの要素のValueとラベルを取得
  • 使い回し用の変数を登場させる工夫でゴールを目指せそう

ズバリなライブラリの模索

  • このスレッド起点で、ブラウザ関連ライブラリのスクリプト合わせ技1本で、「指定タイトルのウィンドウへ移動」を作ったかたが確かいらっしゃった

https://winactor.com/questions/question/chrome-任意のウィンドウへ移動-スクリプト改変windowhandle→windowti/

  • 同じ要領で、「ラジオボタンオンの値を取得」も作れるのかも
  • 検索でヒットさせられず、スレッドを特定できず、、

(追記)ブラウザ関連ライブラリの合わせ技スレッド、見つかりました。

https://winactor.com/questions/?q=Chromeの制御対象画面フォーカス(ウィンドウスイッチ)方法

 

ズバリなXPathの模索

  • 「値の取得」にセットすべきズバリのXPathを特定できれば、スクリプト加工さえ不要になる

XPathでチェックを入れたチェックボックスを指定する方法 - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10228302260

  • ないのかも、、

RadioボタンのCheck状態取得 [Selenium C#]
https://teratail.com/questions/362722

//td/input[@checked and @name='hdl_ep_mod']

  • 正に求めてた回答っぽくて、これで拾えたかと思いきや、、

//*[@id="default"]/dd/ul//input[@checked and @name="type"]

  • 出発のほうのこちらがヒットしてしまう、、

<input type="radio" name="type" id="tsDep" value="1" checked="" data-rapid_p="8">

  • checked=""がヒットした模様
  • デベロッパーツールでcheckedな箇所が、Copy outerHTMLではchecked=""になるのも不思議
  • [ページのソースを表示]がオリジナルと思われる

<input type="radio" name="type" id="tsDep" value="1" checked=""/>

  • 末尾が異なるのか、、
  • ここではみんな希望を持って提案が飛び交ってる

Xpath to determine checkbox "checked" attribute in Selenium IDE - Stack Overflow
https://stackoverflow.com/questions/11758616/xpath-to-determine-checkbox-checked-attribute-in-selenium-ide

  • すべての提案を試した結果、惜しいのもあったものの、いずれも玉砕、、
  • checked="abc"みたいになっててくれない限り、拾えそうもない、、
    たいていのラジオボタンは、そんなふうになってない、、
  • Ver.7.4なら「属性値の設定」とかで強制できなくもなさそう
    できたところで、、目的のクリアに繋がるのか、、?
  • CSS Selector方面ならいけるのかも
    WinActorでCSS Selectorを使うには、、JavaScript経由になるか、、

 

jQueryが使われてるサイトなら、Consoleで攻略できそうな情報を発見っ!

【jQuery】ラジオボタンの選択されている項目の取得 at softelメモ
https://www.softel.co.jp/blogs/tech/archives/2894

あいにく、目的のページでは、jQueryは使われておらず、、
値の取得のほうのnameの値を差し替えてConsoleで試すも、あえなく玉砕、、

念のため、バージョン情報です。
WinActor7.2系
Chrome9x

 

素のJavaScriptで攻略できそうな情報を見つけました。

JavaScript | ラジオボタンの値をJavaScriptを使って取得・設定する
https://www.javadrive.jp/javascript/form/index4.html

1ページ内に結構な量があるので、アドレスバーとかConsoleのアプローチだと、結構面倒そう、、
1ページ毎に全ラジオボタンオンの値を一括で配列にブチ込んで、変数に当て込む。
1ページ毎に変数たちを用意しなきゃならない、、
メンテも引き継ぎにくくなっちゃう、、
これが今のバランスポイントならやむを得ないか、、

「ブラウザ操作(配列のアクションを順次実行)」を使ってるシナリオなので、取り込み済みの「値の取得」とか、既存のベーシックなライブラリの範囲に収まればベターです。

目の前の課題で、切羽詰まってます、、
XPathでAndとかOrとかNotの関数を駆使すればいけるのか、、?
でもチェック状態を掴めないなら行き詰まるか、、
やはりスクリプトの合わせ技か、、
合わせ技スクリプトを「ブラウザ操作(配列のアクションを順次実行)」に取り込むのが、今目指せるベストなのかも、、

「指定タイトルのウィンドウへ移動」Chromeの制御対象画面フォーカス(ウィンドウスイッチ)方法のスクリプトを参考にさせていただきたいく所存。
どなたか在り処、検索キーをご存じないでしょうか?

 

 

ひとまず正攻法っぽいフローを試しました。

 

① チェックオンのValue取得に成功したフロー(ラジオボタン)

ブラウザ起動:chrome
ページ表示:https://transit.yahoo.co.jp/
要素数取得://input[@type="radio" and @name="type"]
繰り返し
 文字列の連結://li[ + カウンタ + ]/input[@type="radio" and @name="type"] = XPath
 チェック状態取得:XPath、チェック状態
 分岐:チェック状態 がtrue
  True
   値の取得:XPath、オンの値
   分岐:オンの値連結 等しい 値⇒(ブランク)
    True
     文字列の連結:オンの値 = オンの値連結
    False
     文字列の連結:オンの値連結 + , + オンの値 = オンの値連結
  False
   (何もしない)

 

② チェックオンのValue取得に成功したフロー(チェックボックス)

  • nameが別立てになってるページなら、@typeのand指定は不要で、ラジオボタンと同じフローが使える
  • @type="radio"を@type="checkbox"に変更して、想定通りに動作した
  • 惜しいことに、Valueが全部1、、
  • フローは一定範囲で有効ではある
  • Valueの値で内容が識別できないソースの場合は、目的を満たせない
  • labelのテキストを取得するのが、より汎用的で、後続処理での使い勝手が良さそう
  • 同じ階層か、inputを囲むlabelのテキストを取得すれば良い
  • ほぼすべてのラジオボタン/チェックボックスにlabelがあると信じたい

 

③ チェックオンのラベルテキスト取得に成功したフロー

要素数取得://input[@type="radio" and @name="type"]
繰り返し
 文字列の連結://li[ + カウンタ + ]/input[@type="radio" and @name="type"] = inputのXPath
 文字列の連結://li[ + カウンタ + ]/input[@type="radio" and @name="type"]/../label = labelのXPath
 チェック状態取得:inputのXPath、チェック状態
 分岐:チェック状態 がtrue
  True
   値の取得:labelのXPath、オンの値
   分岐:オンの値連結 等しい 値⇒(ブランク)
    True
     文字列の連結:オンの値 = オンの値連結
    False
     文字列の連結:オンの値連結 + , + オンの値 = オンの値連結
  False
   (何もしない)

 

所感

  • 遅い、、遅すぎる、、
  • 1ページ内50項目くらいを「ブラウザ操作(配列のアクションを順次実行)」で「値の取得」するのは実質2秒程度
  • この「要素数取得」から始めるフローで手段のチェックボックスオン全6個分のテキストを取得したログは10秒弱
  • ブラウザやWinActorの最小化とか、環境次第で少しは短くなると思われえる
  • それにしても遅すぎる、、

 

野望

  • まず、このフローを1ライブラリ[チェックオンのラベルテキスト取得]にしたい
    スクリプト内のループや条件分岐の中で、「要素数取得」「チェック状態取得」「値の取得」のSubやFunctionを呼び出す感じ
    何とかなるかも

わたしの中では少し背伸びの領域です。
「作ってみたよ!」「できたよ!」な回答/コメント、いただけら嬉しいです。
ご協力いただける場合は、既製ライブラリのスクリプト丸ごと掲載とかは、権利の関係でよろしくないので、「ここはこのライブラリのこのブロック」みたいな示しかただと助かります。

https://winactor.com/questions/question/【2019-05-17フォーラム運営チームより】※重要※スクリ/

https://winactor.com/questions/question/スクリプトの権利について、本気出して調べてみ/

[チェックオンのラベルテキスト取得]のニーズは多いはずなので、そのうちプチライブラリとかでリリースされたら嬉しいかも。
Ver.7.4.1に同梱されてたりして。

https://winactor.com/questions/question/《重要》winactor最新版-ver-7-4-1リリース日決定のご案内/

 

  • 次に「ブラウザ操作(配列のアクションを順次実行)」に組み込みたい

https://winactor.com/questions/question/教わりながら「ブラウザ操作配列のアクションを/

jinta 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。