通过硒单击链接

Posted

技术标签:

【中文标题】通过硒单击链接【英文标题】:Clicking on a link via selenium 【发布时间】:2013-09-07 00:14:16 【问题描述】:

我正在尝试通过 Selenium 进行一些网页抓取。我的问题很简单:你如何找到一个链接,然后你如何点击它?例如:以下是我试图网络抓取的 html

<td bgcolor="#E7EFF9">
  <a href="javascript:selectDodasaDetdasdasy(220011643,'Kdasdası');" target="_self">
   Details
  </a>
</td>

所以,如您所见,“详细信息”一词是一个链接。

如何使用 Selenium 找到该链接并单击它?

【问题讨论】:

在通过 td_tag = tr_tag.find_element_by_tag_name('td') 获得 td 元素后,我在 td_element 上尝试了建议的想法。当我调用 find_element_by_link_text('details') 时,我收到 selenium.common.exceptions.NoSuchElementException 错误消息无法找到元素定位元素 ''method'': ''link text'', ''selector'': ''详情''' 【参考方案1】:

那你可以试试这样的。

for (int i=0; i&lttd.length(); i++)
        driver.find_element_by_xpath("(//a[contains(text(),'Details')])[i]").click()
        

【讨论】:

我不能在 td 标签上调用 find_element_by_link 吗? 有很多带有文本''details''的链接,我在标签上循环,当我在一个td内时,我想在那个td标签上调用find_element_by_link_text。这有意义吗? 我确实尝试过,我很感激,但它提供了所有链接。如前所述,我正在循环它们,我希望能够通过循环打开每一个 查看是否有很多带有“details”文本的链接,那么通过link_text你将无法找到它的唯一属性,你需要搜索一个唯一标识符。 检查我已经修改了我的答案,将这行代码放在 for 循环中并迭代变量 'i' 它应该可以正常工作。【参考方案2】:

每个人都错过了一件事。它是由以下语句列出的。您需要从此列表中选择一个元素。

driver.find_element_by_link_text('Details')

如果你检查

for i in driver.find_element_by_link_text('Details')
    i.click()

宾果游戏:-)

【讨论】:

你试过自己的代码吗?首先,find_by_element 返回一个 webdriver 元素,如果您尝试单击迭代它的所有内容,您肯定会收到错误,因为字符串或其他字符串没有 click 属性。也许你在谈论find_elements(注意s,复数),所以你会得到一个webdriver元素的列表,你可以点击() @petezurich,编辑错误内容的目的是什么? @erm3nda 提高整体网站质量?给任何答案一个公平的反馈机会,例如您提供的具体且有充分理由的批评性反馈?【参考方案3】:

你可以使用find_element_by_link_text:

例如:

link = driver.find_element_by_link_text('Details')

要点击它,只需调用点击方法:

link.click()

【讨论】:

非常感谢,但是我怎样才能在像上面这样的 td 对象上调用它呢?例如,我有 elem_query_result = driver.find_element_by_id('sorgudadasdsac') 然后我有 tr_tag= elem_query_result.find_element_by_tag_name('tr') 然后我有 td_tag = tr_tag.find_element_by_tag_name('td') 我想调用 find_element_by_link_text('Details' ) 在 td_tag 上,但它给了我以下错误:无法找到元素 ''method'': ''link text'', ''selector'': ''details''' @canbaran,一旦你找到你的元素,你可以再次调用它上面的函数。例如,一旦您执行td_tag = tr_tag.find_element_by_tag_name('td'),您就可以执行td_tag.find_elements_by_tag_name("a") 来查找其上的链接。【参考方案4】:

您可以尝试使用 xpath 定位器点击链接 例如

link=driver.find_element_by_xpath(.//*[@id="content"]/div[3]/div/div/div[2]/h4)

link.click()

【讨论】:

以上是关于通过硒单击链接的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过硒获取链接位置吗?

当我尝试使用for循环单击所有链接时,硒显示陈旧错误?

如何让硒单击动态按钮?

单击硒作为双击

硒 - 不可点击的链接[重复]

如何使用硒单击具有动态输入的单选按钮?