【问题标题】:VBA hit button on IE pageIE页面上的VBA点击按钮
【发布时间】:2016-05-19 22:46:18
【问题描述】:

我想做的是打开一个网站,然后按下一个按钮。我不能让它工作,所以我要求你们所有有经验的程序员!

按钮xml记录为:

z-menu-item-inner-r"><span class="z-menu-item-space"></span></td></tr></tbody></table></a></td><td id="z_e6_mm" align="left" z.type="Menuit2" class="z-menu-item " style="padding-left:4px;padding-right:4px;" z.zcls="z-menu-item" z.top="true"><a href="/NTS/NTSBatchJobs.zul" class="z-menu-item-cnt"><table id="z_e6_mm!a" cellspacing="0" cellpadding="0" border="0" class="z-menu-item-body " style="width: auto;"><tbody><tr><td class="z-menu-item-inner-l"><span class="z-menu-item-space"></span></td><td class="z-menu-item-inner-m"><div><button id="z_e6_mm!b" type="button" class="z-menu-item-btn">**HIT ME**&nbsp;</button></div></td><td class="

我尝试按下的按钮名为: 打我

我使用的代码是:

Sub IE_Auto()


    Dim i As Long
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate "mysite"

    Set elems = IE.Document.getElementsByTagName("button")
        For Each e In elems
            If e.Name = "Hit Me" Then
                e.Click
                Exit For
            End If
     Next e
End Sub

【问题讨论】:

    标签: excel vba explorer


    【解决方案1】:

    为什么不使用getElementByID("z_e6_mm!b") 方法来返回该按钮的实例。 id 元素在文档中是唯一的,不需要迭代。

    Dim btn as Object
    Set btn = IE.Document.getElementByID("z_e6_mm!b")
    btn.Click
    

    注意:可能不适用于某些版本的 IE。

    另外值得注意的是,您可能会遇到一个简单的区分大小写比较返回 false 的问题,并且永远不会单击按钮,因为:"Hit Me" != "HIT ME"。您可以通过强制对按钮的文本进行UCASE 或LCASE 评估来控制这一点,但这似乎不如使用 ID 属性可靠。

    另请注意:这不是元素的.Name,而是.InnerText

    正如您所观察到的,ID 属性正在发生变化,因此您无法可靠地对其进行编程。在这种情况下,您将不得不进行蛮力迭代,并比较一些非唯一属性,例如 innerText:

    Dim btn as Object
    For each btn in IE.Document.getElementsByTagName("button")
        If btn.innerText = "**HIT ME**&nbsp;" Then '<~~~ MODIFY AS NEEDED  ###
            btn.click
            Exit For 'break out of the loop
        End If
    Next
    

    【讨论】:

    • 感谢您的快速回复。我收到运行时错误:自动化错误。接口未知,在 Set btn = IE.Document.getElementById("z_e6_mm!b") 中停止
    • 需要IE8+ 你有什么版本?您可能还需要 IE 的就绪/等待循环以允许页面完成加载。另外,验证 XML 中的正确元素 ID。
    • 我的IE版本是8.0.7601.17514。我还添加了一个等待循环,持续 10 秒:Application.Wait DateAdd("s", 10, Now)。我如何验证这是正确的元素?我用按钮标题搜索!
    • Application.Wait 不起作用。您需要使用 While: DoEvents: Loop Until IE.ReadyState = 4 and Not IE.Busy
    • 似乎每次打开链接时按钮 id 都会发生变化。有没有办法获取当前按钮 id?
    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多