首页 > 后端开发 > Python教程 > 为什么使用 :contains() 的 CSS 选择器在使用 Firefox 的 Selenium Python 中会导致'InvalidSelectorException”?

为什么使用 :contains() 的 CSS 选择器在使用 Firefox 的 Selenium Python 中会导致'InvalidSelectorException”?

Patricia Arquette
发布: 2024-10-18 21:57:03
原创
270 人浏览过

Why Does CSS Selector with :contains() Cause

Selenium Python 中无效的 CSS 选择器:“selenium.common.exceptions.InvalidSelectorException 带有“span:contains('string')””

在 Firefox 中使用 Selenium Python 时,尝试使用 :contains() 伪类通过 CSS 选择器查找元素,例如“span:contains('Control panel')”,可能会导致“InvalidSelectorException”。

原因:

Firefox 或 Chrome 不支持 :contains() 伪类。如问题 #987 和 #1547 中所述,WebDriver 选择不支持 Sizzle 风格的 CSS 选择器,其中包括 :contains()。

替代解决方案:

相反,请考虑使用 span 标签的任何其他属性,例如:

element = "span[attribute_name=attribute_value]"
登录后复制

或者,使用基于 DOM 树结构的 XPath:

  • 使用文本():

    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 来使用 :contains() 进行 CSS 选择器:

$('span:contains("Control panel")')
登录后复制

注意: 带有 :contains() 的 CSS 选择器是控制台也不支持,但 jQuery 用自己的实现覆盖 document.querySelector,允许使用它们。

以上是为什么使用 :contains() 的 CSS 选择器在使用 Firefox 的 Selenium Python 中会导致'InvalidSelectorException”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板