我有一张包含大量链接的表格。这些ID都是唯一的,但与显示的实际文本不对应,所以我遇到了一些麻烦。
实施例
<tr>
<td><a id="011" href="/link">Project 1</a></td>
</tr>
<tr>
<td><a id="235" href="/link">Project 2</a></td>
</tr>
<tr>
<td><a id="033" href="/link">Project 3</a></td>
</tr>
<tr>
<td><a id="805" href="/link">Project 4</a></td>
</tr>
我只知道ahref中的文本(即项目1),我想搜索它并单击它。我一直无法理解这一点,我一直在玩find_element_by_xpath一段时间。
我一直在使用
selectproject = browser.find_element_by_xpath("//a[contains(.,projectname)]").click();
(projectname是一个改变每次迭代的变量) 我认为它可以找到该元素,因为脚本运行但它没有单击。我想这是因为我实际上并没有搜索ahref而只是为了文本?
答案 0 :(得分:1)
以下是您的问题的答案:
如果您想点击包含文字Project 1
的链接,可以使用以下代码行:
browser.find_element_by_xpath("//a[contains(text(),'Project 1')]").click()
或
browser.find_element_by_xpath("//a[@id="011"][contains(text(),'Project 1')]").click()
正如您所提到的,Project 1
部分是动态的,因此您可以尝试构建单独的function()
来点击这些链接。使用所有项目名称逐个调用该函数,如下所示(函数在 Java
考虑根据您所需的语言绑定进行转换):
public void clickProject(String projectName)
{
browser.findElement(By.xpath("//a[.='" + projectName + "']")).click();
}
现在,您可以在main()
课程中致电:clickProject(Project1)
如果这回答你的问题,请告诉我。
答案 1 :(得分:0)
如果您要求&#34;单击项目1&#34;,则应使用 作为定位器。不需要乱用XPath。
browser.find_element_by_linkText("Project 1").click();
// or the more flexible
browser.find_element_by_partialLinkText("Project 1").click();
由于额外的.find_element_by_partialLinkText()
元素,span
定位器策略应考虑任何额外的空白填充。
注意:我编写Java,因此上面的Python语法可能已关闭。但这些方法必须存在。