vba Excel getElementsByTagName(“a”) 有效,但 IE.Document.getElementsByClassName(“textoblanco”) 不起作用

vba Excel getElementsByTagName("a") work but IE.Document.getElementsByClassName("textoblanco") don't work

提问人:Domingo SC 提问时间:4/19/2023 更新时间:4/20/2023 访问量:45

问:

我使用

Dim IE As InternetExplorerMedium
Set IE = New InternetExplorerMedium

 For Each ele In IE.Document.getElementsByTagName("a")
        Debug.Print ele.innerhtml
       If InStr(ele.innerhtml, "Resolver") > 0 Then Debug.Print "OK": Exit For
 next
 For Each ele In IE.Document.getElementsByClassName("textoblanco")
        Debug.Print ele.innerhtml
       If InStr(ele.innerhtml, "Resolver") > 0 Then Debug.Print "OK": Exit For
  next

WWEB页面是:

<a href="javascript:botonDuplicarActividad();" class="textoblanco">Duplicar  </a>
<a href="javascript:botonHojaTecnica();" class="textoblanco">Hoja Tec       </a>
<a href="javascript:botonResolver();" class="textoblanco">Resolver       </a>

第一个“For each”工作并执行 Debug.Print “OK”,但第二个“For Each”不起作用:运行时间:438。对象不支持此属性或方法

我尝试使用Excel中的网页

Excel VBA GetElementsByClassName GetElementsByTagName

评论

0赞 Tim Williams 4/19/2023
错误在哪条线上?
0赞 Tim Williams 4/20/2023
如果您只想运行由链接触发的脚本:IE.document.parentWindow.execScript("botonResolver()", "JavaScript")
0赞 Domingo SC 4/20/2023
我可以用execScript运行脚本,但我想了解错误。错误是:对于IE中的每个ele。Document.getElementsByClassName(“textoblanco”) 但对于 IE 中的每个 ele。Document.getElementsByTagName(“a”) 工作正常。类“textoblanco”比标签“a”少,效率更高

答:

0赞 Tim Williams 4/20/2023 #1

在IE中没有问题,除非你有一个非常旧的版本。getElementsByClassName

这对我来说很好用:

Sub Tester()
    
    Dim IE As InternetExplorerMedium, ele As Object
    Set IE = New InternetExplorerMedium
    
    IE.Navigate "about:blank"
    IE.Document.Body.innerhtml = _
        "<a href=""javascript:botonDuplicarActividad();"" class=""textoblanco"">Duplicar</a>" & _
        "<a href=""javascript:botonHojaTecnica();"" class=""textoblanco"">Hoja Tec</a>" & _
        "<a href=""javascript:botonResolver();"" class=""textoblanco"">Resolver</a>"
    
    Debug.Print "By Tag Name"
    For Each ele In IE.Document.getElementsByTagName("a")
        Debug.Print , ele.innerhtml
        If InStr(ele.innerhtml, "Resolver") > 0 Then Debug.Print , "OK": Exit For
    Next
    
    Debug.Print "By Class Name"
    For Each ele In IE.Document.getElementsByClassName("textoblanco")
        Debug.Print , ele.innerhtml
        If InStr(ele.innerhtml, "Resolver") > 0 Then Debug.Print , "OK": Exit For
     Next
End Sub

评论

0赞 Domingo SC 4/21/2023
然后,问题出在网页的其他部分。我将把所有代码都交给你的子测试人员。谢谢。