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

基于Selenium VBA提取表格红色行数据至Excel对应列

优化VBA代码实现指定红色样式行的TD内容提取

需求说明

  • 遍历Excel当前工作表A列的土耳其身份证号(TC),逐个在内部网站查询
  • 定位ID为grdHizmetKontrol的表格,提取其中style属性包含color:Red的<tr>行下所有<td>的文本内容
  • 将提取的内容写入对应TC所在行的右侧列(按顺序填充,避免覆盖)

原代码问题分析

  1. 外层循环变量i被内部代码重新赋值,导致TC遍历逻辑错乱
  2. 提取的红色TD内容被追加到B列末尾,无法对应到当前查询的TC行
  3. 未处理同一行多个红色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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:16:29