使用Python Selenium无法获取网页数据,报错NoSuchElementException
解决Selenium获取动态网页表格时的NoSuchElementException错误
错误原因及修复方案:
页面未加载完成就执行元素查找
目标表格是动态渲染的,直接调用find_element会因为元素还未生成而报错。必须添加显式等待,确保元素加载完成后再操作。使用了已弃用的旧API
find_elements_by_tag_name是Selenium 3的旧方法,Selenium 4+已不再支持,需改用find_elements(By.TAG_NAME, "tr")。Windows路径转义问题
代码中ChromeDriver路径的反斜杠\未转义,会被解析为特殊字符,导致驱动路径无效。需用原始字符串(前缀加r)或双反斜杠\\处理路径。
修正后的代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 用原始字符串处理Windows路径,避免转义错误 driver = webdriver.Chrome(r'C:\chromedriver_win32\chromedriver.exe') url = 'https://draft.shgn.com/nfc/public/dp/788/grid' driver.get(url) # 显式等待表格元素出现,最长等待10秒 wait = WebDriverWait(driver, 10) table_area = wait.until( EC.presence_of_element_located((By.XPATH, '//*[@id="result"]/table')) ) # 使用Selenium 4+的新版API查找表格行 table_entries = table_area.find_elements(By.TAG_NAME, "tr") print(len(table_entries)) driver.close()
额外排查提示:
如果仍然报错,可检查以下几点:
- 确认目标页面的XPath是否正确(可通过浏览器开发者工具验证)
- 页面是否存在iframe,需先切换到对应iframe再查找元素
- 是否有反爬机制(如登录验证、人机验证)限制访问
内容的提问来源于stack exchange,提问作者Carlos Marcano
相关产品推荐
相关产品推荐

