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

如何将适配IE的VBA网页表格抓取代码改造为支持Chrome运行

Chrome适配版VBA网页表格抓取方案

改造前置准备

  • 安装Selenium Basic组件,安装完成后打开VBA编辑器,点击「工具-引用」,勾选Selenium Type Library
  • 下载和本地Chrome浏览器大版本一致的ChromeDriver,放到Selenium Basic默认安装目录(通常为C:\Program Files\SeleniumBasic\)
  • 原IE DOM模型的节点索引从0开始,Selenium驱动Chrome的节点索引从1开始,取值时需要对应调整序号,避免错位报错

适配Chrome的可运行代码

Sub ScrapeTableFromChrome()
    Dim chromeDriver As New Selenium.ChromeDriver
    Dim trCollection As Selenium.WebElements, singleTr As Selenium.WebElement
    Dim ws As Worksheet
    Dim targetUrl As String, startRow As Long
    
    ' ===== 可根据实际需求修改以下配置 =====
    targetUrl = "替换为你要抓取的目标网页地址"
    Set ws = ActiveSheet
    startRow = 2 ' 数据写入的起始行,若第1行是表头可从第2行开始写
    ' ==================================
    
    ' 启动Chrome并跳转目标页
    chromeDriver.Start "chrome"
    chromeDriver.Get targetUrl
    ' 等待目标表格加载,最长等待10秒
    chromeDriver.WaitElementByCss ".data.data14902", 10000
    ' 匹配原逻辑:获取class包含data data14902的元素下所有tr行
    Set trCollection = chromeDriver.FindElementsByCss(".data.data14902 tr")
    
    ' 遍历行写入数据
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    For Each singleTr In trCollection
        ' 跳过列数不足12的无效行(空行、表头分隔行等)
        If singleTr.Children.Count >= 12 Then
            ws.Cells(startRow, "A").Value = singleTr.Children(1).Text
            ws.Cells(startRow, "B").Value = singleTr.Children(2).Text
            ws.Cells(startRow, "C").Value = singleTr.Children(3).Text
            ws.Cells(startRow, "D").Value = singleTr.Children(4).Text
            ws.Cells(startRow, "E").Value = singleTr.Children(5).Text
            ws.Cells(startRow, "F").Value = singleTr.Children(6).Text
            ws.Cells(startRow, "G").Value = singleTr.Children(7).Text
            ws.Cells(startRow, "H").Value = singleTr.Children(8).Text
            ws.Cells(startRow, "I").Value = singleTr.Children(9).Text
            ws.Cells(startRow, "J").Value = singleTr.Children(10).Text
            ws.Cells(startRow, "K").Value = singleTr.Children(11).Text
            ws.Cells(startRow, "L").Value = singleTr.Children(12).Text
            startRow = startRow + 1
        End If
    Next singleTr
    
    ' 恢复Excel配置、释放资源
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    chromeDriver.Quit
    Set chromeDriver = Nothing
End Sub

代码可优化方向

  • 改用数组批量写入:逐单元格写入Excel会频繁触发界面刷新,效率极低。可提前定义和目标数据尺寸一致的二维数组,遍历行时把数据存入数组,全部抓取完成后一次性将数组赋值给工作表对应区域,运行速度可提升5~10倍。
  • 增加异常处理逻辑:添加错误捕获机制,当页面加载失败、元素不存在、某行数据格式异常时,能正常释放Chrome进程,不会出现Chrome后台残留占用内存、代码直接崩溃的问题。
  • 增加数据清洗步骤:抓取文本时提前去除内容首尾的空格、换行符、不可见特殊字符,避免写入Excel后出现内容错位、格式异常。
  • 参数化硬编码内容:将表格选择器、目标URL、写入列范围、超时时间等固定值抽离为代码开头的可配置常量,后续网页结构调整时不需要修改核心遍历逻辑,仅修改配置即可。
  • 支持分页抓取:如果目标表格是分页展示的,可增加自动点击下一页的逻辑,循环抓取所有分页的数据后统一写入,不需要手动逐页操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:45:47