7

xpathを使用してWebページにテキストを取得するためにセレンを使用しています。

ページタグの構造は次のとおりです -

<span id="data" class="firefinder-match">
    Seat Height, Laden
  <sup>
     <a class="speckeyfootnote" rel="p7" href="#">7</a>
  </sup>
</span>

次のコードを使用する場合 -

driver.findElement(By.xpath("//span[@id='data']")).getText();

私は結果を得る=Seat Height, Laden 7

<sup>しかし、タグ内のテキストを読み取らずに結果を取得したいSeat Height, Laden

希望する結果を得るために使用できる xpath 式を教えてください。

4

1 に答える 1

8

Seleniumでこれを行う方法がわからないので、JSソリューションがあります。アイデアは、要素のすべての子 (テキスト ノードを含む) を取得してから、テキスト ノードのみを選択することです。.trim()不要なスペースを取り除くために、いくつかの (または同等の JS) 呼び出しを追加する必要がある場合があります。

コード全体:

WebElement elem = driver.findElement(By.id("data"));
String text;
if (driver instanceof JavascriptExecutor) {
    text = ((JavascriptExecutor)driver).executeScript(
            "var nodes = arguments[0].childNodes;" +
            "var text = '';" +
            "for (var i = 0; i < nodes.length; i++) {" +
            "    if (nodes[i].nodeType == Node.TEXT_NODE) {" +
            "        text += nodes[i].textContent;" +
            "    }" +
            "}" +
            "return text;"
            , elem);
}

そして、読みやすくするために JS だけを使用します。

var nodes = arguments[0].childNodes;
var text = '';
for (var i = 0; i < nodes.length; i++) {
    if (nodes[i].nodeType == Node.TEXT_NODE) {
        text += nodes[i].textContent;
    }
}
return text;
于 2012-05-31T15:33:58.373 に答える