通过硒单击链接
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<td.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()
【讨论】:
以上是关于通过硒单击链接的主要内容,如果未能解决你的问题,请参考以下文章