【问题标题】:Using Python and Selenium why am I unable to find link by link text?使用 Python 和 Selenium 为什么我无法通过链接文本找到链接?
【发布时间】:2015-07-16 11:48:42
【问题描述】:

我有一个列表 web 元素,其中包含一堆链接。 html 看起来像:

<li>
<a href="/shopping/cart_items/12444" data-method="delete" rel="nofollow" class="ss-delete"><span class="ss-icon"></span> Remove</a>
<a href="/sessions/new"><span class="ss-icon"></span> Sign in to save items</a
...

当我尝试做类似的事情时:

link = element.find_element_by_link_text('Sign in to save items')

我收到一条错误消息:

NoSuchElementException:消息:无法定位元素: {"method":"link text","selector":"登录保存项目"}

我已经能够通过执行 find_elements_by_tag_name('a') 找到此链接,然后仅使用具有正确 HREF 的链接,但我想了解第一种方法失败的原因。

【问题讨论】:

  • 试试element.find_element_by_link_text('Sign.in.to.save.items')
  • 如果您刚刚加载了一个新页面,请确保使用 WebDriverWait 确保某些 WebElements 已经加载。尝试通过链接文本进行识别时,这似乎是一个常见问题。

标签: python selenium selenium-webdriver


【解决方案1】:

我之前遇到过find_element_by_link_text方法有时有效有时无效;即使在一个案例中。我认为这不是访问元素的可靠方法;最好的方法是使用find_element_by_id

但是在您的情况下,当我访问该页面时,没有 id 可以帮助您。您仍然可以通过两种方式尝试find_elements_by_xpath

1- Accessing title: find_element_by_xpath["//a[contains(@title = 'Sign in to save items')]"]

2- Accessing text: find_element_by_xpath["//a[contains(text(), 'Sign in to save items')]"]

希望对你有帮助。

【讨论】:

  • 感谢有关 xpath 的课程。这比我认为我必须这样做的方式更好。
  • 非常有用。我整天都在尝试使用部分文本和链接文本,但从未奏效。很好的答案。
  • 但它第一次工作,第二次出现相同的错误消息。你有什么建议吗?
【解决方案2】:

问题很可能在于链接文本之前或/和之后的额外空格。您仍然可以使用“部分链接文本”匹配来处理它:

element.find_element_by_partial_link_text('Sign in to save items')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2019-06-09
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多