为啥我不能使用类名找到元素?

Posted

技术标签:

【中文标题】为啥我不能使用类名找到元素?【英文标题】:Why can't I find element using class name?为什么我不能使用类名找到元素? 【发布时间】:2021-04-12 01:32:31 【问题描述】:

我试图找到这个按钮并点击它。 但我得到这个错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: "method":"css selector","selector":".sqdOP  L3NKy   y3zKF     "
  (Session info: chrome=87.0.4280.88)

我注意到它正在寻找一个不同的字符串'.sqdOP L3NKy y3zKF' bc 它在类名前面添加了这一点。是这个问题吗?

<button class="sqdOP  L3NKy   y3zKF     " type="button">Follow</button>

谢谢!

【问题讨论】:

您使用的选择器是什么?请分享您的代码 【参考方案1】:

如果类名值包含空格,Selenium 无法通过点“.”定位它 你必须使用这个结构:

"[class='sqdOP  L3NKy   y3zKF     ']"

或者只是尝试使用 XPath 通过可见文本进行定位:

"//button[text()='Follow']"

如果遇到元素点击拦截异常,尝试通过JS点击,如下:

 public void executeClickJS(WebDriver driver, WebElement webElement) 
    ((javascriptExecutor) driver).executeScript("arguments[0].click();", webElement);
  

【讨论】:

当我尝试运行第一个解决方案时,我收到此错误:selenium.common.exceptions.InvalidSelectorException:消息:无效选择器:指定了无效或非法选择器 第二个解决方案给出了另一个错误:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element 在点 (315, 202) 处不可点击。其他元素会收到点击:...(会话信息:chrome=87.0.4280.88) @user4248 尝试使用第二种解决方案,但通过 JavascriptExecutor 单击。请参阅上面我编辑的答案。【参考方案2】:

如果没有具有相同类名的按钮,您也可以使用它来定位它: driver.find_element_by_class_name("sqdOP")

Selenium 无法识别类名中的空格(除非您执行 Villa_7 所说的操作),因为它们实际上是“复合类”(请参阅​​ this post 和 this one)。我相信它与 CSS 有关。

仅供参考,看看您当前如何尝试选择按钮的代码会很有帮助。

【讨论】:

以上是关于为啥我不能使用类名找到元素?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能使用“List”作为 UITableViewController 子类的类名?

js为啥根据id就可以找到容器里的子元素,而根据类名就找不到?

Eclipse中为啥按住ctrl点类名不能跳转

Selenium / Python - 带有空格的类名无法本地元素

为啥我无法使用 MSXML2 和 VBA 将 HTML 类名添加到元素集合

Python:无法找到具有 id 或类名的元素,webdriver 无法找到 id 或类名