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

如何在Selenium中按标签名和类名查找元素并解决点击异常?

嘿,我来帮你搞定这个Selenium的问题~你的思路方向是对的,但碰到的ElementNotInteractableException通常意味着:虽然找到了目标元素,但它当前状态下没法被正常点击——可能是被其他元素遮挡、不在浏览器可视区域内、元素本身处于隐藏状态,或者页面还没完全加载完成。下面给你几个可行的改进方案:

方案1:用更精准的定位方式(首推)

虽然你说只熟悉find_elements_by_tag_name和find_element_by_class_name,但其实Selenium支持CSS选择器,能直接定位带ddd类的span元素,省得遍历所有span:

# 直接抓取所有class包含ddd的span标签
target_spans = driver.find_elements_by_css_selector("span.ddd")
for span in target_spans:
    try:
        span.click()
    except Exception as e:
        print(f"点击这个元素失败啦:{e}")

span.ddd这个选择器会精准匹配所有class属性里有ddd的span,比遍历所有span高效多了。

方案2:优化你原来的遍历方法,解决不可交互问题

要是你更习惯原来的遍历思路,可以针对报错的情况做优化:

2.1 等元素可交互了再点击

有时候元素还没加载好就急着点,就会触发这个错误。可以用显式等待,确保元素处于可点击状态再操作:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

listEle = driver.find_elements_by_tag_name("span")
for a in listEle:
    if "ddd" in a.get_attribute('class'):
        try:
            # 最多等10秒,直到元素能被点击
            WebDriverWait(driver, 10).until(EC.element_to_be_clickable(a))
            a.click()
        except Exception as e:
            print(f"元素暂时不可交互,换个方法试试:{e}")

2.2 用JavaScript强制点击

如果元素确实存在,但因为样式或者遮挡没法被Selenium正常点击,那就用JavaScript直接触发点击事件——这招能绕过Selenium的交互检查:

listEle = driver.find_elements_by_tag_name("span")
for a in listEle:
    if "ddd" in a.get_attribute('class'):
        try:
            # 调用浏览器的JS引擎执行点击
            driver.execute_script("arguments[0].click();", a)
        except Exception as e:
            print(f"用JS点击也失败了:{e}")
额外要排查的点
  • 先确认目标span是不是真的可点击:有些span只是个容器,实际能点的是里面的<a>标签(比如你代码里的那个<a href="#" class="hhh">Text</a>),这种情况你应该点击里面的a标签,而不是span本身。
  • 检查有没有弹窗、遮罩层挡住了目标元素,必要时先把遮挡的元素关掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:47:28