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 无效。

几乎是完美的,但问题在于 :,如 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')]
      

快照:


参考资料

您可以在以下位置找到一些相关的详细讨论: