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

Jer*_*itz 6 python selenium xpath css-selectors

在 Python 上的 Selenium 中,我尝试使用选择一个元素

driver = webdriver.Firefox()
driver.find_element_by_css_selector("td:contains('hello world')")
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

>>>> selenium.common.exceptions.WebDriverException: Message: u'An invalid or illegal string was specified' 
Run Code Online (Sandbox Code Playgroud)

我可以通过这种方式使用许多不同的 CSS 选择器来选择元素,但使用 :contains() 似乎总是会抛出错误。注意:当我尝试使用时遇到同样的错误:

driver.find_element_by_xpath("//td[contains(text(),'hello world')]")
Run Code Online (Sandbox Code Playgroud)

请指教。谢谢!

编辑:解决了!

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

//td[contains(text(),'hello world']
Run Code Online (Sandbox Code Playgroud)

解析器在“hello”之后的空格处被截断,因此 xpath 选择器看起来像

//td[contains(text(),'hello
Run Code Online (Sandbox Code Playgroud)

这显然会引发错误。所以我需要调整我的解析以正确读取我的 xpath 选择器。

再次感谢您所有快速、有用的答案!

fal*_*tru 6

替换find_element_by_xpath_selectorfind_element_by_xpath(没有find_element_by_xpath_selector方法):

driver = webdriver.Firefox()
...
driver = driver.find_element_by_xpath(u"//td[contains(text(), 'hello')]")
Run Code Online (Sandbox Code Playgroud)

完整示例

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()
Run Code Online (Sandbox Code Playgroud)