2016-12-15 58 views
0

這個網站有一個有趣的結構,我實際上設法得到我想用硒,但第二次嘗試後,我無法獲得我想要的數據。這是怎麼一回事呢: -無法檢索鋰標籤信息

1日試(正確的信息): - 銀行名單, 銀行賬戶和資產負債

第二個嘗試(錯誤信息): - 銀行轉賬的方法, 銀行名單

我注意到div突然轉移到了不同​​的位置。我使用這個XPath提取我想要的信息: -

//div[12]/div[1]/ul[1]/li['.$x.'] 

現在我希望它在DIV ID提取的基礎,所以我想出了這個XPath: -

//*[@id="idBnk_panel"]//div/ul/following::li 

但它無法正常工作來提取我需要的信息。任何想法如何從基於這種結構的li標籤中獲取信息?

<div id="something_here"> 
    <div> 
     <ul> 
      <li></li> 
      <li></li> 
      <li></li> 
     </ul> 
    </div> 
</div> 
+0

在代碼上使用它之前,您可以先從瀏覽器中測試您認爲正確的xpath。在chrome或firefox中,打開控制檯並寫入$ x('// xpath/here'),如果xpath路徑是正確的,那麼它會返回一個元素,這會突出顯示,因此您可以知道它是否是您想要的 – mosaad

回答

0

我的理解是你想提取所有3 <li>標籤數據。因此,這裏是該代碼 -

List<WebElement> element = driver.findElements(By.xpath("//div[@id='something_here']/div/ul/li")); 
    for(WebElement iterate:element) 
    { 
     System.out.println(iterate.getText()); 
    } 

在這裏,我以前用過getText()方法,只得到<li>標籤的文本。你可以根據你的要求操縱你想要做的事情。

0

您正在使用XPath是不正確 // * [@ ID = 「idBnk_panel」] // DIV/UL /如下::李

正確的XPath按照您顯示HTML是 //格[@ ID = 'something_here']/DIV/UL /利[index_number_as_required] 或可以直接使用 // DIV [@ ID = 'something_here'] //的Li [index_number_as_required]

,然後使用字符串text = driver.findElement(By.xpath(// div [@ id ='something_here'] // li [index_number_as_required]))。getText();

0

如果xpath由於某些動態數據顯示而時時更改,由於div的「id」可用,因此您也可以使用下面的代碼。

List<WebElement> mainLabels = new ArrayList<WebElement>(); 
mainLabels = driver.findElement(By.id("something_here")).findElements(By.tagName("li")); 
//mainLabels list contains all the li elements 

//Then you can access the texts either this way 
mainLabels.get(0).getText();//This will give you the text that is in first li 
mainLabels.get(1).getText();//This will give you the text that is in second li 

//OR this way 
for (int i = 0; i < mainLabels.size(); i++) { 
    System.out.println(mainLabels.get(i).getText()); 
}