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

如何使用VBA-Selenium从嵌套Div提取动态加载表格到Excel?

解决VBA-Selenium获取动态加载表格数据并导出到Excel的问题

你遇到的核心问题是页面表格属于动态加载内容,登录后立即抓取页面HTML时,表格还未渲染完成,所以只拿到了加载状态的Div。以下是针对性的修改方案:

关键修改点

  • 调整等待策略:用显式等待替代过早的隐式等待,确保目标表格元素加载完成后再进行抓取
  • 修正无效配置位置(比如--headless需放在启动浏览器前才生效)
  • 新增表格数据直接导出到Excel的逻辑

修改后的完整代码

Option Explicit

Private ch As Selenium.ChromeDriver

Sub TestSelenium()
    Set ch = New Selenium.ChromeDriver
    
    ' 配置无头模式(如需隐藏浏览器窗口)
    ch.AddArgument "--headless"
    ch.Start
    ch.Get "https://siteaddress"
    
    ' 设置全局隐式等待(单位:毫秒)
    ch.Timeouts.ImplicitWait = 10000
    
    ' 执行登录操作
    With ch.FindElementById("logInForm", timeout:=10000)
        .FindElementById("j_username").SendKeys "username"
        .FindElementById("j_password").SendKeys "password"
        .FindElementById("submitButton").Click
    End With
    
    ' 显式等待目标表格加载完成(替换为你实际的表格ID/选择器)
    ' 示例:等待ID为"targetTable"的表格显示
    ch.WaitUntil (Condition:=Function(d) d.FindElementById("targetTable").IsDisplayed), timeout:=20000
    
    ' 定位目标表格
    Dim targetTable As Selenium.WebElement
    Set targetTable = ch.FindElementById("targetTable")
    
    ' 将表格数据导出到Excel
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = "抓取数据"
    
    ' 遍历表格行与列,写入Excel单元格
    Dim rows As Selenium.WebElements, cols As Selenium.WebElements
    Dim i As Integer, j As Integer
    
    Set rows = targetTable.FindElementsByTag("tr")
    For i = 1 To rows.Count
        Set cols = rows(i).FindElementsByTag("td")
        For j = 1 To cols.Count
            ws.Cells(i, j).Value = cols(j).Text
        Next j
    Next i
    
    ' 可选:保存加载完成后的完整页面HTML到TXT
    Dim filePath As String
    filePath = "C:\temp\MyTestFile.txt"
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    
    If fso.FileExists(filePath) Then fso.DeleteFile filePath
    With fso.CreateTextFile(filePath)
        .Write ch.ExecuteScript("return document.body.innerHTML;")
        .Close
    End With
    
    ch.Quit
    Set ch = Nothing
    MsgBox "数据导出完成!", vbInformation
End Sub

注意事项

  1. 替换代码中的"targetTable"为你实际要抓取的表格ID(可通过浏览器审查元素工具获取)
  2. 确保已引用以下库:
    • Selenium Type Library(对应你的Selenium版本)
    • Microsoft HTML Object Library
    • Microsoft Scripting Runtime(用于FileSystemObject)
  3. 如果表格嵌套在iframe中,需在定位表格前执行ch.SwitchToFrame ch.FindElementByTag("iframe")切换到对应iframe

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:55:44