Selenium Python:find_element_by_css_selector()使用:contains()

Selenium Python:find_element_by_css_selector()使用:contains(),python,xpath,selenium,css-selectors,Python,Xpath,Selenium,Css Selectors,在Python上的Selenium中,我尝试使用 driver = webdriver.Firefox() driver.find_element_by_css_selector("td:contains('hello world')") 这给了我一个错误: >>>> selenium.common.exceptions.WebDriverException: Message: u'An invalid or illegal string was specified'

在Python上的Selenium中,我尝试使用

driver = webdriver.Firefox()
driver.find_element_by_css_selector("td:contains('hello world')")
这给了我一个错误:

>>>> selenium.common.exceptions.WebDriverException: Message: u'An invalid or illegal string was specified' 
我可以用许多不同的CSS选择器来选择元素,但是使用:contains()似乎总是会出错。注意:我在尝试使用时遇到相同的错误:

driver.find_element_by_xpath("//td[contains(text(),'hello world')]")
请告知。谢谢

编辑:解决了

问题解决了!非常感谢你的帮助!我犯了两个重大错误: 1.)我认为:contains()是一个被接受的css3选择器(事实证明它不是当前规范的一部分,这就是为什么我不能选择这种方式) 2.)xpath选择器本来可以使用,但我使用的解析器假设xpath中永远不会有空格,所以它会按空格分割参数。因此,当我传入xpath选择器时

//td[contains(text(),'hello world']
解析器在“hello”后面的空格处被截断,因此xpath选择器看起来像

//td[contains(text(),'hello
这显然会造成错误。因此,我需要调整解析以正确读取xpath选择器


再次感谢您快速、有用的回答

find_element_by_xpath_selector
替换为(没有
find_element_by_xpath_selector
方法):


完整示例

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://python.org')
link = driver.find_element_by_xpath(u'//a[contains(text(), "Download")]')
link.click()

你做得不对。您需要首先创建驱动程序对象,如下所示:

driver = webdriver.Firefox()
driver.get("http://www.python.org")
然后导航到所需的url,如下所示:

driver = webdriver.Firefox()
driver.get("http://www.python.org")
然后在该
驱动程序上
对象需要调用所需的方法。没有包含。您可以通过以下方法继续操作:

elem = driver.find_element_by_xpath("//td[contains(text(), 'hello')]")
而不是

driver.find_element_by_css_选择器(“td:contains('hello world')))

您也可以使用此选项:

驱动程序。通过_css_选择器(“td*='hello world')查找_元素

注意:*在css中,选择器的工作原理与XPath中包含的相同

参考:

请向我们展示html内容。。没有名为
包含的任何内容。
cssselect
支持
:contains()
伪选择器,但它引用了已删除的早期CSS3草稿()。我不知道还有其他项目支持这个假象-selector@pault. 那是jQery一号。Selenium不支持jQuery one..@Babai,jQuery实际使用的
包含
选择器来自Sizzle,而不是jQuery。很好!不过,我在实际代码中并没有犯那个特别的错误(只是在堆栈溢出问题中)。我相应地更新了问题。但仍然是相同的错误。@JeremyMoritz,请用您正在处理的url显示您的实际代码。@falsetru这是什么
br。通过xpath(u”//td[contains(text(),'hello')]”查找元素“
?什么是
br
?@Babai,是我的错,我修正了
br
来自我的spike解决方案。感谢您的评论。@falsetru以下是我使用xpath方法时遇到的错误:selenium.common.exceptions.InvalidSelectorException:Message:u'给定选择器//h3[包含(text()),无效或未生成WebElement。出现以下错误:\nInvalidSelectorError:无法找到xpath表达式为//h3[contains(text())的元素,原因是以下错误:\n[Exception…”该表达式不是合法表达式。“代码:“12”nsresult:“0x805b0033(SyntaxError)”感谢您提请注意此选择器!不幸的是,它的工作方式与您在此声明的不一样。如果您仔细阅读引用的网页,您将看到
*=
(如
^=
$=
)用于选择元素的属性,而不是这些元素的内部文本。感谢@JeremyMoritz消除混淆。是的,您是对的,它适用于属性而不是文本。