首页  >  文章  >  后端开发  >  如何在 Selenium Python Firefox 中使用'span:contains(\'string\')\”处理 InvalidSelectorException?

如何在 Selenium Python Firefox 中使用'span:contains(\'string\')\”处理 InvalidSelectorException?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-18 21:59:03637浏览

How to Handle InvalidSelectorException with

Selenium.common.exceptions.InvalidSelectorException with "span:contains('string')"

在 Firefox 中使用 Selenium Python 并尝试时使用 CSS 选择器“span:contains('Control panel')”查找元素,会遇到以下错误:

selenium.common.exceptions.InvalidSelectorException: Message: Given css selector expression "span:contains('Control panel')" is invalid: InvalidSelectorError: 'span:contains('Control panel')' is not a valid selector: "span:contains('Control panel')"

在 Selenium IDE 中,此方法成功定位元素。然而,在 Python 中,它失败了。

根本原因

根据 CSS 规范,Firefox 或 Chrome 不支持“:contains”伪类,即使在 WebDriver 之外。它特定于 Selenium 1.0 中使用的 Sizzle 选择器引擎。但是,WebDriver 不支持 Sizzle 风格的 CSS 选择器。

解决方案

使用属性或 XPath 选择器来代替“:contains”:

  • 属性:

    element = "span[attribute_name=attribute_value]"
  • XPath:

    • 使用text():

      element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
    • 使用 contains():

      element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
    • 使用 normalize-space():

      element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")

替代解决方案

使用 jQuery:

$('span:contains("Control panel")')

琐事

  • 控制台也不支持 CSS 选择器,但 jQuery 通过 $('...') 支持它们,当页面上存在 jQuery 时,它会覆盖 document.querySelector。

以上是如何在 Selenium Python Firefox 中使用'span:contains(\'string\')\”处理 InvalidSelectorException?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn