我正在开发我的第一个 Selenium 项目,但遇到了一些障碍。我有一个包含 3 个不同表格的网页。我只想从这些表之一中提取数据。我面临的问题是 bootstrap 用于设置这些页面的样式,因此所有表共享相同的类,并且没有一个表具有我可以专门搜索的 id。我可以通过搜索 tr/td 的 xpath 在不同的页面上执行此操作,但由于存在多个表,这不适用于此页面。检查我想要从中提取数据的表的页面源,我得到如下内容:
<div class="col-md-4">
<div class="panel panel-success">
<div class="panel-panel-heading>
<h3 class="panel-title">table title</h3>
</div>
<div class="table-responsive">
<table class="table-striped table-bordered">
<thead>...</thead>
<tbody>
<tr ng-repeat="element in main.elementService.elementTable" class="ng-scope">
<td class="ng-binding">info1</td>
<td class="ng-binding">info2</td>
<td class="ng-binding">info3</td>
<td class="ng-binding">info4</td>
</tr>
<tr ng-repeat="element in main.elementService.elementTable" class="ng-scope">
<tr ng-repeat="element in main.elementService.elementTable" class="ng-scope">
<tr ng-repeat="element in main.elementService.elementTable" class="ng-scope">
</tbody>
</table>
</div>
所以这导致了我不确定可以使用什么来仅选择该表的问题。如果我搜索tr
或td
我也会从页面上的其他表中获取数据。
我看到的该表的唯一独特功能是 <div class="col-md-4">.
我不知道是否可能,但我的想法是进行某种组合搜索以转到此特定 div,然后转到 xpath tr/td 从表的每个单元格中提取数据,但我我是 Selenium 的新手,我不知道如何去做这件事。我正在查看的文档似乎没有显示如何将多种策略组合在一起,并且我在谷歌搜索中遇到了困难,所以我没有找到一个谷歌链接让我深入了解如何做到这一点.
我尝试过类似的方法,但我认为我的语法不正确
List<WebElement> TableElems = chrome.findElements(By.xpath("//div[@class='col-md-4']//tr/td"));
我也尝试过
List<WebElement> TableElems = chrome.findElements(By.xpath("//div[@class='col-md-4']" && "//tr/td"));
但是&&
这里不允许使用运算符。
如果有人有任何想法可以引导我走向正确的方向,我将不胜感激。
最佳答案
您可以使用此 xpath 表达式:
"//div[@class='col-md-4']//tr/td"
与您的尝试的不同之处在于使用了 class
属性(没有 id)以及 tr
之前的双斜杠,这允许 tr
成为任意深度的 div[@id='col-md-4']
的后代元素,而不仅仅是直接子元素。
关于java - 查找没有id的特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967981/