python selenium find_element_by_link_text,元素存在但未找到

python selenium find_element_by_link_text, element exists but not found

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

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

在尝试了许多不同的替代方案之后,我终于设法通过迭代 links 直到找到正确的文本来完成此操作,如下所示:

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

好的,所以,它有效。但是,如果我只是尝试显而易见的解决方案,为什么我会收到 "unable to locate element" 错误:

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

它就在那里,我正在看着它,所以我只是不明白我做错了什么。我也尝试使用部分 link 文本来搜索不带“1”的文本,使用单引号或双引号,但我仍然得到 "unable to locate element." There are no frames, no new windows打开或任何东西。

是的,我发帖是因为我是新手,不知道自己在做什么,所以无需赘述这一点,谢谢。 :)

它在 docs 中解释说 find_element_by_link_text 仅适用于锚标记内的 href 文本,您指向一个 h5 标记并且 "Package "1" - 尚未下载" 不是在锚标签中

那是因为 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')]")

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

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

find_element_by_link_text 仅适用于 link。即 href

尝试find_element_by_partial_link_text。 'Partial' 从 public 站点提取信息的不同之处。