【发布时间】:2013-08-06 08:28:14
【问题描述】:
我的页面有一个包含 11 列的表格,给定第 2 列的文本值,我想单击同一行的第 11 列(箭头按钮)。
我的 DOM 如下所示:
<table id=”atab” width=”100%” class=”at-class”>`
<thead>…</thead>
<tbody>
<tr>...</tr>
<tr>
<td>…</td>
<td>
<a href=”/abc/def/ghi/prop?id=1”>grp1</a>
</td>
<td>…</td>
<td>…</td>
<td>200</td>
<td>…</td>
<td>…</td>
<td>…</td>
<td>…</td>
<td>…</td>
<td>
<ul class=”dropwd”
<li class>
<input class=”a-act a-menu-button” type=”button” value=”^”
<ul class=”sub_menu” style=”vis””>…</ul>
</li>
</ul>
</td>
<tr>
<tbody>
这有效(因为我刚刚从检查元素中获取了 xpath)。不过我不能用。
myxpath = "//*[@id='atab']/tbody/tr[2]/td[11]/ul/li/input”
myxpath.click()
我需要使用 contains,然后抓住兄弟姐妹(第 11 位,从我有我的 contains 的第 9 位)。我为 myxpath 尝试了以下操作,但找不到该元素。我在其他地方使用了相同的格式,这很好。唯一的不同是这一次,我得到的不是相邻的兄弟姐妹,而是第 x 个兄弟姐妹。
在哪里campg = grp1
//table[@class='at-class']//td[contains(text(),' " + campg + " ')]/following-sibling::td[9]/ul/li/input
//* [@id='atab']//td[contains(text(),' " + campg + " ')]/following-sibling::td[9]/ul/li/input
//* [@id='campaigns']//td[contains(text(),' " + campg + " ')]/following-sibling::td[9]/ul/li/input[@type=’button’]
我也尝试了其他组合。
【问题讨论】:
-
我也会使用
following-sibling。我想知道您的问题是否不是来自单引号和双引号...' " + campg + " '...之间的空格。您还可以对按钮的值使用谓词吗? (以便不需要知道包含按钮的 td 的确切位置)。像这样的东西:"//table[@class='at-class']//td[contains(., '" + campg + "')]/following-sibling::td//ul/li/input[@type='button' and @value='^']" -
另外,使用
%语法创建 XPath 表达式通常更易读:"//table[@class='at-class']//td[contains(., '%s')]/following-sibling::td//ul/li/input[@type='button' and @value='^']" % campg -
我完全按照您所说的进行了尝试,但仍然找不到该元素。空间不是问题(这是一个错字,我没有空格)。我也尝试了谓词,仍然没有运气。下面的第二个答案完美无缺。非常感谢您的调查。
-
确实,@JensErat 的回答更加简洁。我仍然建议使用
td[11]以外的其他内容选择最终输入(我总是对表达式中的位置常量保持警惕)。但是如果input[@type='button' and @value='^']不起作用,我没有建议没有原始文档来找出这个谓词有什么问题
标签: python xpath selenium webdriver selenium-webdriver