为啥我不能使用类名找到元素?
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就可以找到容器里的子元素,而根据类名就找不到?
Selenium / Python - 带有空格的类名无法本地元素