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

Selenium+VBA代码使用Goto跳转后出现无限循环问题求助

问题根源分析

你的代码出现无限循环的核心原因有两个:

  • 嵌套了Do Until和For循环,两个循环同时控制Line变量,逻辑冲突;当GoTo EndCode执行后,Next Line会继续推进For循环,外层Do循环又会重新触发,导致循环无法终止。
  • GoTo EndCode的目标标签在For循环内部,跳转后并没有跳出整个循环结构,反而继续执行循环迭代。

另外还有两个潜在问题:

  • test123被定义为String类型,但实际用来接收FindElementsByXPath(...).Count的数值结果,类型不匹配会引发错误。
  • 重复调用FindElementsByXPath判断元素是否存在,冗余且影响执行效率。
修复后的代码方案

移除多余的Do循环,调整GoTo的目标位置到For循环外部,同时修正变量类型、优化元素查找逻辑:

Dim drive As New Selenium.ChromeDriver
Dim test123 As Long ' 修正为数值类型,匹配Count返回值
Dim ABC As Long
Dim Line As Long

ABC = Sheets("Send").Range("A" & Rows.Count).End(xlUp).Row

' 只保留For循环完成行遍历,移除冲突的Do循环
For Line = 4 To ABC
    ' ....... 这里是你省略的其他业务代码
    
    ' 仅执行一次元素查找,复用结果
    test123 = drive.FindElementsByXPath("/html/body/div[1]/div/span[2]/div/span/div/div/div/div/div/div[1]").Count
    
    If test123 > 0 Then
        drive.Wait 1000
        Cells(2, 1).Value = "Not"
        drive.FindElementByXPath("/html/body/div[1]/div/span[2]/div/span/div/div/div/div/div/div[2]/div/div/div/div").Click
        drive.Wait 1000
        
        ' 跳转到For循环结束后的位置,直接终止所有循环
        GoTo ExitLoop
    Else
        Cells(2, 2).Value = "Yes"
    End If
Next Line

ExitLoop: ' 将标签移到For循环外部,确保跳转后直接退出循环流程
drive.Quit
MsgBox "Send OK"
End Sub
关键修改点说明
  • 移除外层Do Until循环:For循环已经可以完成从第4行到最后一行的遍历,双重循环完全多余且逻辑冲突。
  • 调整标签位置:把跳转标签移到Next Line之后,确保GoTo执行后直接跳出整个For循环,不再继续迭代。
  • 修正变量类型:将test123改为Long,匹配Count返回的数值类型,避免类型转换错误。
  • 优化元素查找:只执行一次FindElementsByXPath,减少不必要的页面交互,提升代码效率。

如果你的需求是遍历所有行,仅在某一行遇到目标元素时跳过该行后续操作,不需要GoTo,可通过GoTo到Next前的自定义标签实现类似Continue For的效果:

For Line = 4 To ABC
    ' ....... 其他代码
    
    test123 = drive.FindElementsByXPath("...").Count
    If test123 > 0 Then
        ' 执行操作
        GoTo SkipCurrentLine ' 跳过当前行剩余逻辑
    End If
    
    ' 当前行需要执行的其他逻辑
    
SkipCurrentLine:
Next Line

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:45:17