0

我正在尝试在 python 中使用 selenium 单击此链接:

<header class="row package-collapse">
    <h5 ng-bind="ctrl.getPackageHeader(package)" class="ng-binding">Package "1" - not yet downloaded</h5>
    <!-- ngIf: package.DownloadedAt -->
</header>

在尝试了许多不同的替代方案之后,我终于设法通过遍历链接来实现这一点,直到找到正确的文本,如下所示:

list = browser.find_elements_by_tag_name("h5")
for item in list:
    text = item.text
    if text == 'Package "1" - not yet downloaded':
        item.click()

好的,所以,它有效。但是,如果我只是尝试明显的解决方案,为什么我会收到“无法定位元素”错误:

browser.find_element_by_link_text('Package "1" - not yet downloaded')

它就在那里,我正在看着它,所以我只是不明白我做错了什么。我也尝试过使用部分链接文本在没有“1”的情况下搜索它,使用单引号或双引号,但我仍然得到“无法定位元素”。没有框架,没有新的窗户打开或任何东西。

是的,我发布这个是因为我是一个新手,不知道我在做什么,所以不需要详细说明这一点,谢谢。:)

4

4 回答 4

2

那是因为by_link_text仅适用于<a>标签。对于其他标签,您可以使用xpath

完全符合

find_element_by_xpath("//h5[.='Package \"1\" - not yet downloaded']")

对于部分文本

find_element_by_xpath("//h5[contains(., '\"1\" - not yet downloaded')]")
于 2019-10-29T09:03:13.023 回答
0

它在文档中解释说find_element_by_link_text仅适用于锚标签内的href文本,您指向h5标签并且“包“1”-尚未下载”不在锚标签中

于 2019-10-29T09:02:36.907 回答
0

如果您想使用文本处理您的 h5 元素,请使用下面的 xpath

driver.find_elements_by_xpath("//*[contains(text(), 'Package \"1\" - not yet downloaded')]")

find_element_by_link_text仅适用于链接。即href

于 2019-10-29T09:06:17.340 回答
0

试试 find_element_by_partial_link_text。“部分”在从公共网站提取信息方面发挥了重要作用。

于 2021-04-28T14:22:53.083 回答