【问题标题】:python selenium find_element_by_link_text, element exists but not foundpython selenium find_element_by_link_text,元素存在但未找到
【发布时间】:2019-10-29 08:57:41
【问题描述】:

我正在尝试在 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”的情况下搜索它,使用单引号或双引号,但我仍然得到“无法定位元素”。没有框架,没有打开新窗口或任何东西。

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

【问题讨论】:

    标签: python selenium selenium-webdriver linktext partiallinktext


    【解决方案1】:

    这是因为 by_link_text 仅适用于 &lt;a&gt; 标记。对于其他标签,您可以使用xpath

    完全匹配

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

    对于部分文本

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        find_element_by_link_text 仅适用于链接。即href

        【讨论】:

          【解决方案4】:

          试试 find_element_by_partial_link_text。 “部分”对从公共网站提取信息起到了重要作用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-07-25
            • 2016-04-18
            • 1970-01-01
            • 2012-10-15
            • 1970-01-01
            • 1970-01-01
            • 2021-12-17
            相关资源
            最近更新 更多