XPathをブラウザで取得する

2022年12月18日

  1. XPathをブラウザで取得するケース
  2. ブラウザの開発者ツールで取得
  3. XPath取得ツールでの解析
  4. XPathが重複する場合
  5. XPathを自分で編集する

XPath取得ツールでは、ブラウザで取得したXPathの解析や、自分で編集したXPathのチェックができます。

ブラウザで取得する必要があるケース

「Yahoo!路線情報」の【出発欄】のXPathを、XPath取得ツールで取得します。

https://transit.yahoo.co.jp/

XPath取得ツール
フルXPath/html/body/div/div/div[2]/div[2]/div[1]/div[1]/div[3]/div[2]/form/dl[1]/dd/span
解析後//form[@name="search"]/dl[1]//span
操作の実施

得られたXPathで文字入力の操作を試みます。

操作結果

【出発欄】の文字入力に失敗しました。

結果詳細
NG指定した要素はTEXT項目ではありません。
エラーの原因

要素のXPathは、//form[@name="search"]/dl[1]//spanでした。
<span>タグは、HTMLのテキスト要素<input type="text">でないため、文字の入力ができません。

したがって、正しくは<input>タグのXPathを取得する必要があります。

ブラウザでXPathを取得する

F12キーを押して、ブラウザの開発者ツールを開きます。

開発者ツール

【出発欄】を右クリックして、「開発者ツールで調査する」を選択

開発者ツールで調査する

先ほどの<span>要素の上に、<input>要素があります。

<input type="text">
XPathの取得

HTMLソース側の<input>要素を右クリックして、フルXPathを取得します。

完全なXPathをコピー
フルXPath/html/body/div/div/div[2]/div[2]/div[1]/div[1]/div[3]/div[2]/form/dl[1]/dd/input

XPathの解析

このままですと長すぎますし、画面のちょっとした変更でXPathも変わってしまいますので、XPath取得ツールで解析します。

XPath取得ツールの【XPath欄】にフルXPathを入力して、【解析】をクリック

XPathの解析
フルXPath/html/body/div/div/div[2]/div[2]/div[1]/div[1]/div[3]/div[2]/form/dl[1]/dd/input
解析後//form[@name="search"]/dl[1]//input[@id="query_input"]

操作の実施

得られたXPathでテキスト入力の操作を実施します。

【出発欄】に「東京」と入力できました。

補足(XPathの重複)

さて、解析後のXPathですが、<input>タグにid属性があるにも関わらず
 //form[@name="search"]/dl[1]//input[@id="query_input"]
となっています。

HTMLの規約上、id属性は1ページ内で重複して持たせてはいけません。本来であれば
 //input[@id="query_input"]
となるはずです。

実際にブラウザの開発者ツールで、短い方のXPathを取得すると以下のようになります。

XPathのコピー
XPath//*[@id="query_input"]

ところが、このXPathを解析すると、指定したXPathでは6個の要素がヒットし、【出発欄】のテキスト要素を特定することができません。

XPathの重複

実際にHTMLソースを「"query_input"」で検索すると、6件ヒットします。

6件ヒット

このようにid属性が重複してはいけないのは、HTMLの規約上の話であって、「id属性で要素を一意に特定できることが保証されているものではない」という点に注意しましょう。

操作の実施

なお、WinGoferでは「指定したXPathで要素が2個以上取得できる」時は、結果はNGになります。

要素が2個以上
結果詳細
NG要素が2個以上

自分で編集したXPathを解析する

上のケースではid属性だけでは要素を特定できませんが、name属性を合わせることで一意に特定することができます。

【出発欄】のname属性は「name="from"」となっていますので、XPathは

 //input[@id="query_input"][@name="from"]

となります。

XPath取得ツールの【XPath欄】に上のXPathを入力すると、要素が特定され「解析不要」が返されます。

name属性で取得

このように、XPath取得ツールでは、自分でカスタマイズしたXPathが正しいかをチェックすることができます。