OpenQA.Selenium.InvalidSelectorException: '无效的选择器:Selenium 中指定了无效或非法的选择器错误
OpenQA.Selenium.InvalidSelectorException: 'invalid selector: An invalid or illegal selector was specified error in Selenium
我在 CS 中使用 chromedriver 来查找使用 css 选择器的元素,但是我收到以下错误:
OpenQA.Selenium.InvalidSelectorException: 'invalid selector: An invalid or illegal selector was specified
我的代码:
var body = driver.FindElementsByCssSelector(".add-to-cart.float-right.font-montserratSemiBold.text-11.lg:text-12.text-secondary.flex.flex-wrap.leading-articlesmall");
我试图在 this website
上找到 Add to basket
按钮的元素
我的选择器有什么问题,我该如何解决这个问题?
试试这个选择器:
var body = driver.FindElementsByCssSelector(".add-to-cart");
请尝试在 lg:text-12 中的 : 之前添加 双反斜杠 转义字符,如下所示
var body = driver.FindElements(By.CssSelector(".add-to-cart.float-right.font-montserratSemiBold.text-11.lg\:text-12.text-secondary.flex.flex-wrap.leading-articlesmall"));
在我的本地进行了测试,返回 11 个元素时运行良好。
You can use findelements method in selenium
List<WebElement> products=driver.findElements(By.xpath("//button[contains(text(),'Add to basket')]"));
// if you want to pick 1 st product you can use below code
products.get(0).click();
这个错误信息...
OpenQA.Selenium.InvalidSelectorException: 'invalid selector: An invalid or illegal selector was specified
...表示 instance was unable to locate the desired 无效。
css-selectors 几乎是完美的,但问题在于 :
,如 lg:text-12
。字符 :
在 css-选择器 中使用时具有特殊效果,因为它在几个 css 中使用-选择器 变体。几个例子:
input:enabled
p:first-child
p:first-of-type
:not(p)
p:nth-child(2)
p:nth-last-of-type(2)
解决方案
有两种解决方法。
- 在第一种方法中,您可以转义
:
字符。
- 在第二种也是最有效的方法中,您可以使用单个静态 [=100= 而不是提及所有 class 属性]name 将所有带有文本的元素标识为 Add to basket 如下:
css-选择器:
button.add-to-cart
xpath
//button[contains(@class, 'add-to-cart')]
快照:
参考资料
您可以在以下位置找到一些相关的详细讨论:
我在 CS 中使用 chromedriver 来查找使用 css 选择器的元素,但是我收到以下错误:
OpenQA.Selenium.InvalidSelectorException: 'invalid selector: An invalid or illegal selector was specified
我的代码:
var body = driver.FindElementsByCssSelector(".add-to-cart.float-right.font-montserratSemiBold.text-11.lg:text-12.text-secondary.flex.flex-wrap.leading-articlesmall");
我试图在 this website
上找到Add to basket
按钮的元素
我的选择器有什么问题,我该如何解决这个问题?
试试这个选择器:
var body = driver.FindElementsByCssSelector(".add-to-cart");
请尝试在 lg:text-12 中的 : 之前添加 双反斜杠 转义字符,如下所示
var body = driver.FindElements(By.CssSelector(".add-to-cart.float-right.font-montserratSemiBold.text-11.lg\:text-12.text-secondary.flex.flex-wrap.leading-articlesmall"));
在我的本地进行了测试,返回 11 个元素时运行良好。
You can use findelements method in selenium
List<WebElement> products=driver.findElements(By.xpath("//button[contains(text(),'Add to basket')]"));
// if you want to pick 1 st product you can use below code
products.get(0).click();
这个错误信息...
OpenQA.Selenium.InvalidSelectorException: 'invalid selector: An invalid or illegal selector was specified
...表示
css-selectors 几乎是完美的,但问题在于 :
,如 lg:text-12
。字符 :
在 css-选择器 中使用时具有特殊效果,因为它在几个 css 中使用-选择器 变体。几个例子:
input:enabled
p:first-child
p:first-of-type
:not(p)
p:nth-child(2)
p:nth-last-of-type(2)
解决方案
有两种解决方法。
- 在第一种方法中,您可以转义
:
字符。 - 在第二种也是最有效的方法中,您可以使用单个静态 [=100= 而不是提及所有 class 属性]name 将所有带有文本的元素标识为 Add to basket 如下:
css-选择器:
button.add-to-cart
xpath
//button[contains(@class, 'add-to-cart')]
快照:
参考资料
您可以在以下位置找到一些相关的详细讨论: