You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Python使用By.CLASS_NAME查找元素报CSS选择器未找到错误

报错原因

Selenium的By.CLASS_NAME定位方法只接收单个类名作为参数,不支持传入带空格的类名字符串。
你要定位的svg元素class属性值是bi bi-x-circle,这里的空格代表元素同时绑定了两个独立的CSS类:bi、bi-x-circle,不存在名为bi bi-x-circle的单个类。
从报错信息也能看到问题:Selenium把你传入的字符串直接拼成CSS选择器.bi bi-x-circle,这个选择器的语义是「查找class为bi的元素内部,标签名为bi-x-circle的后代元素」,和你要找的svg关闭按钮完全不匹配,自然会报找不到元素。

可行的类名定位方案

你偏好类名定位的话,有两种写法都能满足可读性要求:

  • 直接用单个唯一类名定位
    关闭按钮的功能类bi-x-circle通常在页面中是唯一的,直接把这个单类名传给By.CLASS_NAME即可:
    WebDriverWait(driver,5,.25).until(EC.presence_of_element_located((By.CLASS_NAME,"bi-x-circle")))
    driver.find_element(By.CLASS_NAME,"bi-x-circle").click()
    
  • 用CSS选择器匹配多类(可读性和类名定位一致)
    如果你想同时匹配两个类确保定位精准,换成By.CSS_SELECTOR即可,多类匹配的CSS写法非常直观,和你原本想写的类名逻辑完全一致:
    # 选择同时拥有bi、bi-x-circle两个类的元素
    WebDriverWait(driver,5,.25).until(EC.presence_of_element_located((By.CSS_SELECTOR,".bi.bi-x-circle")))
    driver.find_element(By.CSS_SELECTOR,".bi.bi-x-circle").click()
    

额外优化建议

因为你定位的是弹窗关闭按钮,presence_of_element_located只会等待元素加载到DOM里,不会等元素可交互,容易出现元素存在但被弹窗动画、遮罩层挡住导致点击失败的问题,把等待条件换成element_to_be_clickable稳定性会更高:

close_btn = WebDriverWait(driver,5,.25).until(EC.element_to_be_clickable((By.CSS_SELECTOR,".bi.bi-x-circle")))
close_btn.click()

内容的提问来源于stack exchange,提问作者boston_019

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:36:26