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

VBA网页自动化求助:点击无ID/Class且href动态变化的链接

如何定位并点击动态href且无标识的链接(VBA + IE)

我完全懂你现在的困扰——在STJ的SCON网站完成检索后,要点击的"Acórdãos"链接既没有固定ID/Class,href还会随检索内容动态变化,常规的getElementById或getElementsByClassName根本派不上用场。别急,我们可以通过链接的文本内容来定位它,毕竟这个文本是固定不变的对吧?

先看你现有的代码,已经走完了检索前的所有步骤,现在只需要补充定位并点击目标链接的逻辑。不过有个关键细节要注意:点击"Pesquisar"后页面需要时间加载,一定要做加载等待,不然很可能找不到目标元素。

你的现有代码

Sub teses2()
Dim pesquisa As String
Dim ie As InternetExplorer
Dim elemns As Object
Dim elem As Object
Dim elemns2 As Object
Dim elem2 As Object
Dim elem3 As Object
Dim obj As Object
pesquisa = InputBox("Digite os termos que quer pesquisar: ", "", "")
Set ie = New InternetExplorer
ie.Visible = True
ie.navigate "http://www.stj.jus.br/SCON/"
Application.Wait (Now + TimeSerial(0, 0, 20))
ie.document.getElementById("pesquisaLivre").innerText = pesquisa
Set elemns2 = ie.document.getElementsByTagName("input")
For Each elem2 In elemns2
If elem2.Value = "SUMU" Then elem2.Click
End If
If elem2.Value = "DTXT" Then elem2.Click
End If
If elem2.Value = "INFJ" Then elem2.Click
End If
Next
Set elemns = ie.document.getElementsByTagName("input")
For Each elem In elemns
If elem.Value = "Pesquisar" Then elem.Click
End If
Next
End Sub

修改后的完整代码(添加链接定位点击逻辑)

我在代码里补充了两个核心部分:

  1. 用ReadyState循环等待页面加载(比固定时长等待更靠谱,不会浪费时间或因加载慢丢元素)
  2. 遍历所有<a>标签,通过文本匹配找到"Acórdãos"链接并点击
Sub teses2()
Dim pesquisa As String
Dim ie As InternetExplorer
Dim elemns As Object
Dim elem As Object
Dim elemns2 As Object
Dim elem2 As Object
Dim linkElems As Object
Dim linkElem As Object

pesquisa = InputBox("Digite os termos que quer pesquisar: ", "", "")
Set ie = New InternetExplorer
ie.Visible = True
ie.navigate "http://www.stj.jus.br/SCON/"

' 等待初始页面加载完成
Do While ie.Busy Or ie.ReadyState <> 4
    DoEvents
Loop

ie.document.getElementById("pesquisaLivre").innerText = pesquisa

' 点击SUMU、DTXT、INFJ选项
Set elemns2 = ie.document.getElementsByTagName("input")
For Each elem2 In elemns2
    If elem2.Value = "SUMU" Then elem2.Click
    If elem2.Value = "DTXT" Then elem2.Click
    If elem2.Value = "INFJ" Then elem2.Click
Next

' 点击Pesquisar按钮
Set elemns = ie.document.getElementsByTagName("input")
For Each elem In elemns
    If elem.Value = "Pesquisar" Then elem.Click
Next

' 等待搜索结果页面加载完成
Do While ie.Busy Or ie.ReadyState <> 4
    DoEvents
Loop

' 定位并点击"Acórdãos"链接
Set linkElems = ie.document.getElementsByTagName("a")
For Each linkElem In linkElems
    ' 忽略大小写匹配链接文本,适配网站可能的文本格式变化
    If InStr(1, linkElem.innerText, "Acórdãos", vbTextCompare) > 0 Then
        linkElem.Click
        Exit For ' 找到目标后立即退出循环,避免误点其他匹配项
    End If
Next

' 若后续需要处理新跳转页面,同样要添加加载等待
' Do While ie.Busy Or ie.ReadyState <> 4
'     DoEvents
' Loop

Set ie = Nothing
End Sub

额外提示

  • 用Do While ie.Busy Or ie.ReadyState <> 4替代固定等待,能确保页面完全加载后再执行下一步,避免元素未加载导致的报错
  • vbTextCompare参数可以忽略大小写匹配,就算网站上的链接文本是全大写或其他格式,也能稳定匹配
  • 注意代码文件的编码要支持葡萄牙语特殊字符(比如ão),避免因编码问题导致文本匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:23:27