【问题标题】:Click on picture or link behind it点击图片或后面的链接
【发布时间】:2018-03-21 14:25:22
【问题描述】:

嗨,我有一个宏,它应该点击网页上的按钮。问题是这段代码后面没有 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")

谢谢

【问题讨论】:

    标签: vba internet-explorer getelementbyid getelementsbytagname


    【解决方案1】:

    我也试过

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

    这应该对你有用,但你错过了一些东西。您需要指定您要查找的&lt;a&gt; 标记,因此.getElementsByTagName("a") 变为.getElementsByTagName("a")(i),其中i 是您要查找的标记的索引(您可以通过按每个@987654327 的顺序计数来获得索引HTML中的@标签,从0开始)。

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

    【讨论】:

    • 您也可以使用For each 循环遍历该数组,可能直到找到给定的.Title 属性或href,或者您可以开始计算所有&lt;a&gt; 标签以找到索引你需要的那个。
    • @FilipOndo IE.document 中的每个超链接都有一个&lt;a&gt; 标记 - getElementsByTagName 返回的数组包含其中的每一个。你需要查看你的页面,看看是什么让那个链接成为你想要点击的链接。
    • @NicholasKemp For Each 应该用于迭代集合。使用For 循环迭代数组的效果最好。见VBA For vs For Each
    • @MathieuGuindon 感谢您提供的信息,学习新东西总是好的。
    【解决方案2】:

    您可以使用 CSS 选择器。

    例如,一个属性选择器

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

    或者同样的事情来通过它的值来定位href

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

    最后一个查找包含'fsopenWindow'的href

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

    【讨论】:

      【解决方案3】:

      最后我想出了这个。感谢 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
      

      【讨论】:

        猜你喜欢
        • 2014-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 2013-10-12
        • 1970-01-01
        • 2012-05-17
        • 2017-11-09
        相关资源
        最近更新 更多