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