在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选择器。
再次感谢您提供所有快速,有用的答案!
答案 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