基于Selenium VBA提取表格红色行数据至Excel对应列
优化VBA代码实现指定红色样式行的TD内容提取
需求说明
- 遍历Excel当前工作表A列的土耳其身份证号(TC),逐个在内部网站查询
- 定位ID为
grdHizmetKontrol的表格,提取其中style属性包含color:Red的<tr>行下所有<td>的文本内容 - 将提取的内容写入对应TC所在行的右侧列(按顺序填充,避免覆盖)
原代码问题分析
- 外层循环变量
i被内部代码重新赋值,导致TC遍历逻辑错乱 - 提取的红色TD内容被追加到B列末尾,无法对应到当前查询的TC行
- 未处理同一行多个红色TD的情况,仅保留最后一个匹配内容
修改后的代码
Sub vericek() Dim baglan As New Selenium.WebDriver Dim tablo As TableElement Dim lastRow As Long Dim i As Long, j As Long, k As Long Dim targetCol As Long ' 初始化浏览器并登录 baglan.Start "chrome" baglan.Get "http://deneme.aspx" baglan.FindElementById("login-username").SendKeys "123" baglan.FindElementById("login-password").SendKeys "123" baglan.FindElementById("login-btn").Click ' 等待页面加载完成(可根据实际情况调整等待时间) Application.Wait Now + TimeValue("00:00:05") lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row ' 遍历A列的每个TC号 For i = 1 To lastRow ' 清空并输入当前TC号,执行查询 baglan.FindElementById("txtSicilTCNO").Clear baglan.FindElementById("txtSicilTCNO").SendKeys Cells(i, 1).Value baglan.FindElementById("btnSicilTCNO").Click ' 等待查询结果加载 Application.Wait Now + TimeValue("00:00:05") ' 定位目标表格 Set tablo = baglan.FindElementById("grdHizmetKontrol").AsTable Set Rows = tablo.FindElementsByTag("tr") ' 重置当前TC行的目标列起始位置(从B列开始) targetCol = 2 ' 遍历表格所有行 For j = 0 To Rows.Count - 1 ' 检查当前行是否包含红色样式 If InStr(Rows(j).Attribute("style"), "color:Red") > 0 Then ' 提取当前行所有TD内容 Set Cells = Rows(j).FindElementsByTag("td") For k = 0 To Cells.Count - 1 ' 将TD内容写入当前TC行的对应列 Sheets("Sayfa1").Cells(i, targetCol).Value = Cells(k).Text targetCol = targetCol + 1 Next k End If Next j ' 清空查询输入框,准备下一个TC baglan.FindElementById("txtSicilTCNO").Clear Next i ' 关闭浏览器并释放资源 baglan.Quit Set baglan = Nothing End Sub
关键修改点
- 固定外层循环变量
i,不再内部修改,保证TC遍历顺序正确 - 针对每个TC行,从B列开始按顺序写入提取的TD内容,同一红色行的多个TD会自动填充到C、D等列
- 优先判断
<tr>行的style属性是否含红色,完全匹配需求逻辑(原代码判断的是单个TD的样式) - 增加浏览器关闭和对象释放的代码,避免资源占用
内容的提问来源于stack exchange,提问作者Mahmut
相关产品推荐
相关产品推荐

