如何查找具有非唯一ID /类的div,该div包含具有特定文本的div,然后获取该div下的所有<td>和<tr>标记

问题描述

所以我有类似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 2中的“唯一文本”,因此我可以找到div 1号元素,然后获取div 3中的所有表。

问题是我不确定如何找到没有唯一类名或ID名称 div 。我不能使用完整的XPath,因为表会更改并且div会随机更改。

解决方法

使用下面的xpathdiv 2来查找唯一的文本,然后在div中查找div和表。

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

如果您的所有div如您所说都是嵌套的,并且您的目标是在div3中获取表,则无需获取父级。

这是一个选择:

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

此xpath找到具有唯一文本的font,然后是同级(同父)div

此xpath标识符是另一种选择:

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

此xpath找到具有唯一文本的font,然后将其作为*(任意)父级,然后在其中获取相关的div。

如果要“ div1”,可以再次使父轴向上。

在devtools中看起来像这样: devtool single match

这是基于您的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,因此请说出是否需要更新。

,

按照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 index

    //font[text()='unique text']//following::div[1]
    
  • 使用带有子标签<div2>的{​​{1}},其文本为<font>unique text

    <div> attributes
  • 使用带有子标签//div[./font[text()='unique text']]//following-sibling::div[@class='generic classname' and @id='generic ID name'] 且文本为<div2> index <font>

    unique text
,

我将使用js搜索或获取“唯一文本”的标签。

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

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

,

为您提供的另一种选择:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...