我正试图在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"的部分链接文本来搜索它,使用单引号或双引号,但我仍然得到"找不到元素"。没有框架,没有打开新窗口或任何东西。
是的,我之所以发布这篇文章,是因为我是一个新手,不知道自己在做什么,所以没有必要详述这一点,谢谢。:(
这是因为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')]")
它在文档中解释说,find_element_by_link_text
只能在锚标记内使用href文本,您指向h5标记,而"Package"1"-尚未下载"不在锚标记中
如果您想使用文本处理h5元素,请使用下面的xpath
driver.find_elements_by_xpath("//*[contains(text(), 'Package "1" - not yet downloaded')]")
find_element_by_link_text
仅适用于链接。即href
尝试find_element_by_partial_link_text。'Partial使得从公共网站获取信息变得与众不同。