2016-12-15 55 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()); 
}