Selenium抓取stockcare网站ISIN码表格触发NoSuchElementException怎么办
报错原因
- 页面加载未完成就执行元素查找,目标表格还未渲染到DOM树中
- 绝对路径XPath稳定性极低,页面嵌套结构稍有调整就会定位失败
- 若使用Selenium 4.x及以上版本,旧版
find_element_by_*系列方法已被废弃,会触发调用异常
修复方案
1. 依赖导入补充
需要新增显式等待、元素定位类和pandas相关依赖:
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 import pandas as pd
2. 完整可运行代码
PATH = r"C:\Users\HP\Downloads\chromedriver_win32\chromedriver.exe" # 初始化driver,可选添加页面加载超时设置 driver = webdriver.Chrome(PATH) driver.set_page_load_timeout(15) try: driver.get('http://stockcare.net/ISINNumber.asp') # 显式等待最多10秒,直到目标表格加载完成 # 用相对路径定位,比绝对路径稳定性高 table = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//body/form//table')) ) # 读取表格outerHTML直接转DataFrame,无需手动解析行列 df = pd.read_html(table.get_attribute('outerHTML'))[0] # 打印验证结果 print(df.head()) # 后续可自行调用df.to_csv()等方法存储数据 finally: # 确保无论是否报错都关闭driver driver.quit()
补充说明
如果运行后还是定位失败,可以手动打开目标页面,按下F12检查表格元素的属性,比如如果表格有class、id属性,可以替换XPath为更精准的定位规则,比如//table[@class="xxx"],进一步提升稳定性。
内容的提问来源于stack exchange,提问作者noob_big_data
相关产品推荐
相关产品推荐

