这个错误说明了一切:
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')"
根据
Issue#987
和
Issue#1547
:
The :contains pseudo-class isn't in the CSS Spec and is not supported by either Firefox or Chrome (even outside WebDriver).
伪类是特定于
Sizzle Selector Engine
那个
Selenium 1.0
WebDriver
不会支持
Sizzle
风格
CSS selectors
硒1.0
使用。
:包含
pseudo-class
适用于不支持CSS选择器(IE7、IE8等)的浏览器
浏览器和选择器之间不一致。
<span>
标记如下:
element = "span[attribute_name=attribute_value]"
替代解决方案
您可以使用下列任一选项
X射线
DOM Tree
:
-
使用
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
jQuery公司
具体如下:
$('span:contains("Control panel")')
来自@FlorentB的宝贵评论。
控制台也不支持CSS选择器,但是
JQuery
支持它。这个
$('...')
从控制台是
document.querySelector
JQuery公司
当页面拥有它时。