2014-04-14 114 views
0

我需要使用XPATH从网页选择particulr文本。 我的文字看起来像下面XPATH - 如何从网页获取文本?

The "Add Account Offer" request has been submitted successfully with the order number css_334560. 

在上面的线,我需要得到的只有“css_334560”使用XPATH。有人可以帮我吗?

HTML - :

String a = driver.findElement(By.xpath("//div[@class='txt']/span")).getText(); 
a = a.substring(a.lastIndexOf(' ') + 1).replace(".", ""); 

第一排跨度获取文本

<div id="secondColumn" class="floatBreaker"> 
<div id="mainContents"> 
<h1>Add Account Offers      </h1> 
<div class="infoBox"> 
<div class="topLine"> 
<div class="txtLineRight"> 
<div class="txtLineLeft"> 
<div class="txt"> 
<span>The "Add Account Offer" request has been submitted successfully with the order number css_334560.</span> 
</div> 
</div> 
+1

你不会只使用硒的'css_334560'而是你会得到整个文本的span标签。 – TDHM

回答

0

你可以,如果你使用Java使用下面的代码。第二行需要css_334560.并删除点。

Html代码不是满的,所以我不能保证xpath是正确的。

+0

谢谢,它工作完美! – Koushic

+0

不客气。 – Ievgen

0

有几种可能性取决于具体情况。

1-获取包含特定文本的文本节点: 我使用了“添加帐户优惠”,但您可以使用“css_”或任何其他对该文本节点唯一的文本。

如果有几个匹配的文本节点:(让他们并通过他们循环,检查他们一个接一个)

var snapElements = document.evaluate(
    './/text()[contains(.,"Add Account Offer")]', 
    document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 

如果只有一个匹配的文本节点

var txt = document.evaluate(
    './/text()[contains(.,"Add Account Offer")]', 
    document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 

2 - 另一方面,如果<div class="txt">是唯一的(页面上只有一个),如果它更快得到它:

var txt = document.querySelector('.txt'); 
if (txt) { txt = txt.textContent; } 

也有可能......

var txt = document.getElementsByClassName('txt'); 
if (txt[0]) { txt = txt[0].textContent; } 

让整个文本后,现在你可以使用(例如)正则表达式来获得所需的部分......例如:

var css = txt.match(/css_\d+/); 

好运 :)

+0

这个答案唯一的问题是上下文 - 硒。 Selenium期望从给定的XPath选择器返回物理DOM元素,前两个XPath不会返回DOM元素。 – Arran

+0

谢谢Arran ...我不熟悉Selenium,所以我的回答是基于标准的HTML/DOM :) – erosman