4

在 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 选择器。

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

4

3 回答 3

4

替换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')]")

完整示例

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()
于 2013-08-28T15:02:44.943 回答
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')]")
于 2013-08-28T15:07:27.807 回答
1

代替

driver.find_element_by_css_selector("td:contains('hello world')")

您也可以使用此选项:

driver.find_element_by_css_selector("td*='hello world'")

注意:css_selector 中的 * 与 XPath 中的 contains 相同

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

于 2019-01-29T06:50:54.467 回答