如何将适配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
相关产品推荐
相关产品推荐

