如何在“a href”标签中搜索文本并单击?

时间:2017-07-27 15:23:09

标签: python selenium xpath

我有一张包含大量链接的表格。这些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而只是为了文本?

2 个答案:

答案 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语法可能已关闭。但这些方法必须存在。