【问题标题】:Unable to retrieve li tags information无法检索 li 标签信息
【发布时间】:2016-12-15 04:00:34
【问题描述】:

这个网站有一个有趣的结构,我实际上设法使用 selenium 获得了我想要的东西,但是在第二次尝试时,我无法获得我想要的数据。事情是这样的:-

第一次尝试(正确信息):- 银行名单, 银行账户和余额

第二次尝试(错误信息):- 银行转账方式, 银行名单

我注意到 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>

【问题讨论】:

  • 您可以先从浏览器测试您认为正确的 xpath,然后再在代码上使用它。在 chrome 或 firefox 中打开控制台并写入 $x('//xpath/here') ,如果 xpath 路径正确,它将返回一个元素,突出显示,这样你就可以知道它是否是你想要的

标签: php selenium xpath selenium-webdriver


【解决方案1】:

我的理解是你想提取所有 3 个&lt;li&gt; 标签数据。所以这是代码 -

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

这里我使用了getText()的方法,只是获取&lt;li&gt;标签的文本。你可以根据你的要求来操作你想做的事情。

【讨论】:

    【解决方案2】:

    您使用的 xpath 不正确 //*[@id="idBnk_panel"]//div/ul/following::li

    根据您显示的 HTML,正确的 xpath 是 //div[@id='something_here']/div/ul/li[index_number_as_required] 或者你可以直接使用 //div[@id='something_here']//li[index_number_as_required]

    然后使用 String text = driver.findElement(By.xpath(//div[@id='something_here']//li[index_number_as_required])).getText();

    【讨论】:

      【解决方案3】:

      如果由于某些动态数据显示而导致 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());
      }
      

      【讨论】:

        猜你喜欢
        • 2013-08-28
        • 1970-01-01
        • 2019-12-27
        • 2013-05-22
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多