1. ホーム
  2. ジャバスクリプト

[解決済み】Selenium WebDriverでJavaScriptを使用してXPathで要素を取得する方法はありますか?

2022-04-14 10:39:53

質問

のようなものを探しています。

getElementByXpath(//html[1]/body[1]/div[1]).innerHTML

JSを使って要素のinnerHTMLを取得したいのですが(WebDriverが自分で見つけられないので、Selenium WebDriver/Javaでそれを使うため)、どうすればいいのでしょうか?

ID属性を使えばいいのですが、すべての要素がID属性を持っているわけではありません。

[FIXED] (修正済み)

私はjsoupを使ってJavaでやっています。それは私のニーズには合っています。

どのように解決するのですか?

を使用することができます。 document.evaluate :

XPath式の文字列を評価し、その結果を返します。 可能であれば、指定された型。

それは w3-standardized で、全文書化されています。 https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate

function getElementByXpath(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

console.log( getElementByXpath("//html[1]/body[1]/div[1]") );
<div>foo</div>

https://gist.github.com/yckart/6351935

モジラデベロッパーネットワークでも紹介されています。 https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate


別のバージョンでは XPathEvaluator :

function getElementByXPath(xpath) {
  return new XPathEvaluator()
    .createExpression(xpath)
    .evaluate(document, XPathResult.FIRST_ORDERED_NODE_TYPE)
    .singleNodeValue
}

console.log( getElementByXPath("//html[1]/body[1]/div[1]") );
<div>foo/bar</div>