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

时间:2019-10-29 08:57:41

标签: python selenium selenium-webdriver linktext partiallinktext

我试图在python中使用硒单击此链接:

<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 个答案:

答案 0 :(得分: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')]")

答案 1 :(得分:0)

docs中的解释是find_element_by_link_text仅适用于锚标签内的href文本,您指向h5标签,而锚标签中未包含“包“ 1”-尚未下载” < / p>

答案 2 :(得分:0)

如果要使用文本处理h5元素,请在xpath下面使用

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

find_element_by_link_text仅适用于链接。即

答案 3 :(得分:0)

尝试 find_element_by_partial_link_text。 “部分”对从公共站点提取信息产生了影响。