有两个表,我需要选择“date1”文本,它可能在第一个表中的tr / td / a或第二个表中的tr / td中。如何为这种场景编写xpath?
<div>
<table>
<tbody>
<tr>
<td id="1">
<a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL"> </a>
</td>
<td id="1">
<a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date1</a>
</td>
<td id="1">
<a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date1</a>
</td>
<td id="1">
<a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date2</a>
</td>
<td id="1">
<a style="font-style:normal;font-weight:bold;" onclick="return" class="PTL">date3</a>
</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td id="1" style="font-style:normal;font-weight:bold;" class="PTCH"> </td>
<td id="1" style="font-style:normal;font-weight:bold;" class="PTCH">date1</td>
<td id="1" style="font-style:normal;font-weight:bold;" class="PTCH">date2</td>
<td id="1" style="font-style:normal;font-weight:bold;" class="PTCH">date3</td>
</tr>
</tbody>
</table>
</div>
我尝试了这个,但这选择了整行。我想选择一个特定的列
xpath=(//table)[2]//tr[td[contains(text(),'date1') and not(text()=' ')] or td/a[contains(text(),'date1') and not(text()=' ')]]
答案 0 :(得分:0)
//一个 你可以将其复制到文本文件中并将其更改为html使用firebug为初学者找到路径和xpath检查器(Fire Fox插件)非常容易
答案 1 :(得分:0)
经过多次尝试,我想出了这个,并按照我的需要工作。谢谢大家。
xpath=(//table)[1]//tr/td[contains(text(),'date1') and not(text()=' ') or a[contains(text(),'date1') and not(text()=' ')]]
答案 2 :(得分:0)
在您发布的答案中,您实际上是在选择td
元素。你说你想要选择“date1”文本,但如果你已经知道它是什么,那么选择文本是没有意义的。
以下是您发布内容的更简单方法:
//table//tr/td[contains(., 'date1')]
或者,如果您只想包含第一个表格(正如您在帖子中所做的那样):
(//table)[1]//tr/td[contains(., 'date1')]
关于下面的评论,如果要查找属性中的值,请执行以下操作:
(//table)[1]//tr/td[descendant-or-self::*[contains(@style, 'bold')]]
或者,如果您要选择其中包含style
属性bold
的实际元素:
(//table)[1]//tr/td/descendant-or-self::*[contains(@style, 'bold')]