如何读取Element UI表格中近2小时发布的条目?处理NoSuchElementException
解决NoSuchElementException并筛选表格中最近2小时的条目
先搞定定位异常问题
你用的following::el-table-column//span[@class='date']定位不到元素,核心原因是**el-table-column是Element UI的组件虚拟标签**,实际渲染到浏览器DOM里会被转换成<td>、<div>这类普通HTML元素,直接用它写xpath肯定找不到。
修复定位的几种可行方案:
- 直接定位所有带
date类的span://span[@class='date'] - 结合表格容器缩小范围,避免页面其他地方的date元素干扰:
//div[@class='el-table-box']//span[@class='date'] - 通过表格行关联定位:
//table[contains(@class, 'el-table')]//tr//span[@class='date']
另外必须注意:要等表格完全加载再去定位元素,比如用自动化工具的显式等待,避免因元素未渲染完成导致的异常。
筛选最近2小时条目的实现步骤
以Python+Selenium为例,核心逻辑是提取时间、转成可计算的时间对象、对比筛选:
- 等待元素加载:用显式等待确保所有时间元素都已渲染
- 计算时间阈值:算出当前时间往前推2小时的时间点
- 遍历并筛选:提取每个条目的时间,和阈值对比,收集符合条件的条目
- 获取关联信息:如果需要代码、标题等其他字段,通过时间元素向上定位到表格行,再提取对应内容
示例代码
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 from datetime import datetime, timedelta # 初始化浏览器 driver = webdriver.Chrome() driver.get("你的目标页面URL") # 等待表格时间元素加载完成,最长等10秒 wait = WebDriverWait(driver, 10) date_elements = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='el-table-box']//span[@class='date']"))) # 计算2小时前的时间阈值 two_hours_before = datetime.now() - timedelta(hours=2) # 筛选最近2小时的条目 recent_entries = [] for elem in date_elements: time_text = elem.text.strip() # 解析页面时间,格式要和页面显示的完全一致(这里是yyyy-MM-dd HH:mm) try: entry_time = datetime.strptime(time_text, "%Y-%m-%d %H:%M") except ValueError: # 跳过格式异常的时间 continue if entry_time >= two_hours_before: # 定位到当前条目所在的表格行 row = elem.find_element(By.XPATH, "./ancestor::tr") # 提取代码、简称、标题等信息 stock_code = row.find_element(By.XPATH, ".//span[@class='code']").text title = row.find_element(By.XPATH, ".//a[contains(@href, 'disclosure')]").text recent_entries.append({ "股票代码": stock_code, "公告标题": title, "发布时间": time_text }) # 输出结果 for entry in recent_entries: print(entry) driver.quit()
额外注意事项
- 如果表格有分页,需要循环遍历每一页,直到遇到时间早于2小时的条目为止(或者遍历完所有页)
- 时间解析的格式要严格匹配页面上的显示,比如如果页面是
MM/dd/yyyy HH:mm,就要对应修改strptime的格式参数 - 不同自动化工具(比如Playwright、Cypress)的语法略有不同,但核心逻辑一致:等待加载→提取时间→对比筛选
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

