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
修改后的完整代码(添加链接定位点击逻辑)
我在代码里补充了两个核心部分:
- 用
ReadyState循环等待页面加载(比固定时长等待更靠谱,不会浪费时间或因加载慢丢元素) - 遍历所有
<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
相关产品推荐
相关产品推荐

