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

时间:2013-08-28 14:53:07

标签: 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' 

我可以通过这种方式使用许多不同的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选择器。

再次感谢您提供所有快速,有用的答案!

3 个答案:

答案 0 :(得分:4)

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

driver = webdriver.Firefox()
...
driver = driver.find_element_by_xpath(u"//td[contains(text(), 'hello')]")

完整示例

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()

答案 1 :(得分:1)

你做错了。您需要首先创建一个驱动程序对象,如下所示:

driver = webdriver.Firefox()

然后导航到所需的网址,如下所示:

driver.get("http://www.python.org")

然后在driver对象上需要调用所需的方法。没有包含 CSS Selectors。您可以按照以下方法find_element_by_xpath进行操作:

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

答案 2 :(得分:0)

代替

  

driver.find_element_by_css_selector(“ td:contains('hello world')”)

您也可以使用此选项:

  

driver.find_element_by_css_selector(“ td * ='hello world'”)

注意:css_selector中的*与XPath中包含的内容相同

参考: https://saucelabs.com/resources/articles/selenium-tips-css-selectors