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

使用Selenium嵌套循环提取网页全部表格数据的问题求助

问题原因分析

你原代码的核心问题出在行偏移逻辑和列数计算两个地方,导致多表格数据重叠覆盖、列读取异常:

  • 列数统计错误:原代码统计的是整张表格所有<td>标签的总数,而非单行列数,会导致列循环次数异常
  • 行号累加逻辑错误:actualRowNumber = actualRowNumber + i会让行号异常跳变,且输出时你还是用i-1做行偏移,新表格的数据会直接覆盖上一个表格的内容
  • 未处理空行/表头行的异常:部分行可能只有<th>标签无<td>,直接读取会抛出索引错误

修正后可运行代码

Sub GetResults()
    Dim wd As New WebDriver
    Dim table As WebElement
    Dim actualRowNumber As Long
    Dim RowNum As Long, ColNum As Long
    Dim i As Long, j As Long
    Dim trs As WebElements, tds As WebElements
    
    ' 初始化浏览器并加载页面
    wd.Start "chrome"
    wd.Get "https://www.worldathletics.org/competition/calendar-results/results/7147613?day=2"
    ' 起始写入行设为第2行,可根据需要调整
    actualRowNumber = 2
    
    For Each table In wd.FindElementsByCss("[role=table]")
        Set trs = table.FindElementsByTag("tr")
        RowNum = trs.Count
        If RowNum = 0 Then GoTo NextTable ' 跳过空表格
        
        ' 取第一行的td数量作为列数,避免统计全表td
        On Error Resume Next
        ColNum = trs(1).FindElementsByTag("td").Count
        On Error GoTo 0
        If ColNum = 0 Then GoTo NextTable ' 跳过无有效数据的表格
        
        For i = 1 To RowNum
            Set tds = trs(i).FindElementsByTag("td")
            If tds.Count = ColNum Then ' 仅读取列数匹配的有效行
                For j = 1 To ColNum
                    ' 基于全局累加的actualRowNumber写入,避免覆盖
                    Cells(actualRowNumber, j).Value = tds(j).Text
                Next j
                actualRowNumber = actualRowNumber + 1 ' 写完一行行号+1
            End If
        Next i
        
        ' 两个表格之间空2行,保留你原需求
        actualRowNumber = actualRowNumber + 2
NextTable:
    Next table
    
    ' 可选:自动调整列宽
    Columns.AutoFit
    ' 关闭浏览器
    wd.Quit
    Set wd = Nothing
End Sub

核心改动说明

  • 新增全局行号actualRowNumber的初始赋值,所有表格数据都基于这个全局行号依次写入,不会出现覆盖
  • 修正列数计算逻辑,取单行列数而非全表td总数
  • 增加异常判断,跳过空表格、空行,避免运行时报错
  • 写完所有数据后自动关闭浏览器释放资源,可选开启列宽适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:03