为什么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
相关产品推荐
相关产品推荐

