点击后面的图片或链接

时间:2018-03-21 14:25:23

标签: vba internet-explorer getelementbyid getelementsbytagname

嗨我有宏应该点击网页上的按钮..问题是这个代码背后没有ID。它的内部网页面。

开始我的代码

    Set IE = New InternetExplorerMedium

    IE.Navigate = "some website"

        While IE.ReadyState <> READYSTATE_COMPLETE
          DoEvents
        Wend

IE.Visible = True

    IE.document.getElementById("CategoryCombo").Value = "78"
    IE.document.getElementById("CategoryCombo").FireEvent ("onchange")

'~~> wait until element is present on web page
    Do

        Set ieobj = Nothing

    On Error Resume Next

        Set ieobj = IE.document.getElementById("text1265")

        DoEvents

    Loop Until Not ieobj Is Nothing

'~~> search box
   IE.document.getElementById("text1265").Value = "some value"

'~~> button click example
   IE.document.getElementById("subBtn").Click

网站代码的一部分

<a title="View document" href="javascript:FSResults_fsopenWindow('index.fsp?pn=DOLViewDocument&amp;d=78&amp;q=78-17158635-1&amp;o=78-17158635-1&amp;p=DOCUMENT_NAME#ensureVisible')" onclick="fsCancelEvent(event)"><img border="0" alt="View document" align="absmiddle" src="Images/DocTypes/PDF.gif"></a>

我试过

   IE.document.getElementByTitle("View document").FireEvent ("onclick")

我也试过

   IE.document.getElementByTagName("a").FireEvent ("onclick")

谢谢

3 个答案:

答案 0 :(得分:2)

  

我也试过

     

IE.document.getElementByTagName("a").FireEvent ("onclick")

这应该对你有用,但你遗漏了一些东西。您需要指定要查找的<a>代码,因此.getElementsByTagName("a")会变为.getElementsByTagName("a")(i),其中i是您要查找的代码的索引(您将获得通过计算HTML中每个<a>标记的索引,从0开始。

需要索引,因为.getElementsByTagName("tagName")返回一个数组,而不是单个值。

答案 1 :(得分:1)

您本可以使用CSS选择器。

例如,一个属性选择器

ie.document.querySelector("[title='View document']").Click

或者同样可以通过href的值定位href

ie.document.querySelector("[href*=fsopenWindow]").Click

最后一个寻找包含'fsopenWindow'

的href

这两种方法都避免循环遍历元素集合并使用CSS,因此速度更快。

答案 2 :(得分:0)

最后我想出了这个。谢谢你帮助Nicholas Kemp,你的回答让我朝着正确的方向前进

Set elements = IE.document.getElementsByTagName("a")

For Each element In elements
    If Left(element, 33) = "javascript:FSResults_fsopenWindow" Then

    Debug.Print element
    IE.Navigate element

    End If

 Next