ConsoleからXPath要素の取得
WinActor7.2や7.4で、
- 値の取得
- ブラウザ操作(配列のアクションを順次実行)
https://winactor.com/questions/question/教わりながら「ブラウザ操作(配列のアクションを順次実行)」を/
に成功するのに、
Chrome9xのConsoleからXPathの要素の値を取得できません。
助けてください。
と質問しようとしてました。
直前にノウハウが見つかっちゃいました。
ChromeのディベロッパーツールでXPathを使ったクリックがしたい - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13255788543
これで見つけました。
で目的の値の応答が得られちゃいました、、
$x('要素のXPath').innerHTML
以前にココさんから教わった方法でした。
今回は、Utilities APIについて理解を深める良い機会でもありました。
経験のお裾分けです。
https://www.google.com/search?q=Chrome+Console|Utilities+API
残念感を漂わせてるのは、Excel VBA(SeleniumBasic)でなおも未解決だからです。
WinActorのUserForumなので、ほかのツールの話題は遠慮しがちです。
現時点では、ほかのツールで取得できない値が、WinActorでなら取得できてる。
「WinActor、やっぱりスゴイよね」という、現時点での見えかたを共有しつつ。
どれかが誰かのアンテナにキャッチされて、WinActorのノウハウとして化学反応が起きることを願いたいというタテマエ。
SeleniumBasicも使ってるかたから「ただこうすれば良いだけじゃん」のツッコミが入ってあっさり解決しちゃえば嬉しいというホンネ。
試しようがあるサンプルと現状を書き出しました。
お気づきの点があれば、お知らせいただけますか。
サンプル.html
- メモ帳でもANSI/Shift-JISで保存、Chrome等で開く
<html>
<head>
<title>テスト</title>
</head>
<body>
<form name="test" class="abc def ghi">
<table>
<tr>
<td>
<select id="a" name="aa" disabled="disabled"> <!-- ← ※ -->
<option label="aa1" value="1">aa1
<option label="aa2" value="2">aa2 <!-- ← 取得できる -->
</select>
</td>
</tr>
<tr>
<td> <!-- styleのみ -->
<span id="b" disabled="disabled"> <!-- ← ※ -->
<input type="text" id="b" disabled="disabled"> <!-- ← ※ -->
<label hidden="true">ここに取得したい20桁の数値がある</label> <!-- ← 取得できず、Nullになる -->
</span>
</td>
</tr>
<tr>
<td>
地のテキスト<br>
地のテキスト<br>
地のテキスト <!-- ← td内をまるっと取得できる -->
</td>
</tr>
</table>
</form>
</body>
</html>
※ ほかにclass、aria-*、ng-*、style 等がある
Consoleで深堀った状況
- $x('labelのフルXPath')でEnter
- 要素の応答がある
- インデックス0の要素が一意にヒットする
目的の値が入ってる行
0: label 内
innerHTML
innerText
outerHTMLchildNodes: nodeList(1) の
0: text 内
data
nodeValue
textContents
wholeTextfirstChild: text 内
data
nodeValue
textContents
wholeTextlastChild: text 内
同じ
このへんも階層を辿れば、目的の値に辿り着ける模様
parentElement
nextSibling
previousSibling
Consoleで取得できる内容、XPathの要素に入ってる中身の理解が深まった感があります。
何でもできるはずという万能感を、少なくとも錯覚できました。
ChromeコンソールでXPathのテスト - Qiita
https://qiita.com/him0net/items/af2bcb4fd2abbfba8231
ChromeでXPathを取る・検証する - Qiita
https://qiita.com/ywindish/items/5a992c49387d81df900e
リサーチのついでに、クリックした箇所のフルXPathを取得するブックマークレットを見つけました。
ブラウザ上のクリックした要素のXpathを取得する - Qiita
https://qiita.com/narikei/items/fb62b543ca386fcee211
最強のXPathを取得できるように加工したら、わたし自身も常用するかも。
ブックマークレット化は、こちらで紹介したことがあります。
https://winactor.com/questions/question/既存ノウハウの一括検索(普段使いや質問前に)/
誰かのアンテナにキャッチされて、「こう加工してより強いXPathを取得できるようにしたよ!」に繋がると嬉しいです。
現状のVBA
前提
- ExcelリストのXPath(name)を順に処理する(値の取得等)
- ラジオボタンとチェックボックスは、ExcelリストにXPathでなくnameを入力しておく
For r = 1 To 最終行
XPath(name)が空欄ならスキップ
XPath(name)の要素がなければスキップ
テキストなら
Sheets("Sheet1").Cells(r, 3).Value = driver.FindElemetByXPath(XPath).Textプルダウンなら
Set 要素 = ~.AsSelect.SelectedOption
~.Value = 要素.Textラジオボタンなら
For Each 要素 In ~
If 要素.Attribute("checked") Then
要素ID = 要素.Attribute("id")
XPath = "//label[@for='" & 要素ID & "']"
~.Value = ~ByXPath(XPath).Textチェックボックスなら
ラジオボタンとほぼ同じ
複数チェックありの場合は、取得した値を/で連結
ラジオボタンとチェックボックスは、WinActorのスクリプトをVBAに書き直した感じです。
https://winactor.com/questions/question/chromeのシナリオでtd内にあるラジオボタンオンの値を/