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

为什么Selenium等待元素加载完成后仍然无法定位到目标元素?

问题原因
  • By.CLASS_NAME 定位规则仅支持传入单个类名,你传入的table table-striped table-hover table-responsive是4个独立类名用空格拼接的字符串,Selenium会将整个字符串识别为单个类名进行匹配,无法命中对应元素,这是代码报错的核心原因。
  • 优先定位ID为qbs的父容器再查找子表格,可以缩小匹配范围,避免页面其他同类型表格干扰定位结果。
解决方案

方案1:使用CSS选择器直接定位

将定位方式替换为By.CSS_SELECTOR,多个类名之间用.连接,同时加上父容器ID限定范围,修改后的代码如下:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome("Insert Driver Path Here")
game_url = "https://rbsdm.com/stats/box_scores/?_inputs_&type=%22reg%22&away=%22ARI%22&home=%22SF%22&year=2020"
driver.get(game_url)
element = WebDriverWait(driver, 10).until(
        # #qbs匹配ID为qbs的父容器,后面的拼接内容匹配同时拥有多个类的表格元素
        EC.presence_of_element_located((By.CSS_SELECTOR, "#qbs .table.table-striped.table-hover.table-responsive"))
    )
print(element.get_attribute('outerHTML'))

方案2:分步定位父容器和子元素

如果后续页面结构有调整,分步定位的调试成本更低,代码示例如下:

# 先等待qbs父容器加载完成
qbs_container = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "qbs"))
    )
# 再在qbs容器范围内查找目标表格
table = qbs_container.find_element(By.CSS_SELECTOR, ".table.table-striped.table-hover.table-responsive")
调试注意事项

如果修改后仍无法定位,可先执行print(qbs_container.get_attribute('innerHTML')) 输出qbs容器的内部源码,确认表格类名是否和预期一致,排除类名动态生成、拼写错误的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:09:03