java—如何定位具有非唯一id/类的div,其中包含具有特定文本的div,然后获取该div下的所有< td>和< tr>标记

5m1hhzi4  于 2021-07-09  发布在  Java
关注(0)|答案(5)|浏览(327)

所以我有类似这样的html。

<div class="generic classname" id="generic ID name" >  // div1
<div class="presentation" id="body presentation">      // div2
<font>unique text</font>
<div class= "generic classname" id="generic ID name""> //div3
// under this div I have the table entry.
// multiple <td> and <tr>
</div>
</div>
</div>

我的工作是匹配div no 2中的“unique text”,这样我就可以定位元素div no 1,然后获取div no 3中的所有表
问题是我不知道如何定位没有唯一类名或id名的div。我不能使用完整的xpath,因为表是随机变化的,div也是随机变化的。

alen0pnh

alen0pnh1#

您还有一个选择:

//div[font='unique text']/div
ttcibm8c

ttcibm8c2#

使用下面的 xpath 关于 div 2 查找唯一文本,然后查找div和div内的表。

//div[./font[text()='unique text']]/div[1]/table
dxxyhpgq

dxxyhpgq3#

根据html:

<div class="generic classname" id="generic ID name" >  // div1
    <div class="presentation" id="body presentation">      // div2
        <font>unique text</font>
        <div class= "generic classname" id="generic ID name"> //div3
            // under this div I have the table entry.
            // multiple <td> and <tr>
        </div>
    </div>
</div>

因为您的用例不依赖于 <div1> 属性,您可以轻松避免考虑 <div1> .

解决方案

找到第三个 <div> 您有以下四种方法:
使用文本 unique text 以及 <div> attributes :

//font[text()='unique text']//following::div[@class='generic classname' and @id='generic ID name']

使用文本 unique text 和索引:

//font[text()='unique text']//following::div[1]

使用 <div2> 他们有孩子 <font> 将文本标记为 unique text 以及 <div> attributes :

//div[./font[text()='unique text']]//following-sibling::div[@class='generic classname' and @id='generic ID name']

使用 <div2> 他们有孩子 <font> 将文本标记为 unique text 和索引:

//div[./font[text()='unique text']]//following-sibling::div[1]
epggiuax

epggiuax4#

如果您所说的所有div都是嵌套的,并且您的目标是在div3中获取表,那么您不需要获取父级。
这是一种选择:

//font[text()='unique text']/following-sibling::div

这个xpath找到 font 与你的唯一文本,然后它的兄弟姐妹(同一家长) div 此xpath标识符是另一个选项:

//font[text()='unique text']/parent::*/div

这个xpath找到 font 用你独特的文字,然后得到它的 * (any)父级然后获取其中的相关div。
如果需要“div1”,可以再次将父轴向上移动。
在devtools中如下所示:

这是基于您的html外观:

<div class="generic classname" id="generic ID name" >
    <div class="presentation" id="body presentation">
        <font>unique text</font>
        <div class="generic classname" id="generic ID name""> 
            // under this div I have the table entry.
            // multiple <td> and <tr>
        </div>
    </div>
</div>

不同的html需要不同的xpath,所以如果需要更新,请说明。

z9smfwbn

z9smfwbn5#

我会用js搜索或获取“unique text”的标签。

<script>
  // get the element
  let elem = document.getElementsByName('font');
</script>

https://www.w3schools.com/jsref/met_doc_getelementsbyname.asp

相关问题