社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何用css Selenium python选择innerText[duplicate]

fruiz • 5 年前 • 1642 次点击  

我正在firefox中开发selenium python。我试图通过css选择器查找元素

element = "span:contains('Control panel')"
my_driver.find_element_by_css_selector(element)

我正处于错误之下

 raise exception_class(message, screen, stacktrace)
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中它不起作用

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56916
 
1642 次点击  
文章 [ 2 ]  |  最新文章 5 年前
DebanjanB
Reply   •   1 楼
DebanjanB    6 年前

这个错误说明了一切:

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公司 当页面拥有它时。

Guy
Reply   •   2 楼
Guy    7 年前

使用 css_selector Selenium不支持按文本定位元素(尽管它可以在开发人员工具控制台中工作)。唯一的可能是 xpath

element = "//span[contains(text(), 'Control panel')]"
my_driver.find_element_by_xpath(element)

一个 css selector 控制台也不支持,但JQuery支持它。这个 $('...') 从控制台是 document.querySelector