VBA 点击 IE 页面上的按钮
VBA hit button on IE page
我想做的是打开一个站点,然后按一个按钮。虽然我无法让它工作,所以我请求你们所有有经验的程序员!
按钮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** </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
为什么不使用 getElementByID("z_e6_mm!b")
方法 return 该按钮的实例。元素id在文档中是唯一的,不需要迭代。
Dim btn as Object
Set btn = IE.Document.getElementByID("z_e6_mm!b")
btn.Click
注意:可能不适用于某些版本的 IE。
同样值得注意的是,您可能遇到一个简单的区分大小写比较的问题 returning 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** " Then '<~~~ MODIFY AS NEEDED ###
btn.click
Exit For 'break out of the loop
End If
Next
我想做的是打开一个站点,然后按一个按钮。虽然我无法让它工作,所以我请求你们所有有经验的程序员!
按钮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** </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
为什么不使用 getElementByID("z_e6_mm!b")
方法 return 该按钮的实例。元素id在文档中是唯一的,不需要迭代。
Dim btn as Object
Set btn = IE.Document.getElementByID("z_e6_mm!b")
btn.Click
注意:可能不适用于某些版本的 IE。
同样值得注意的是,您可能遇到一个简单的区分大小写比较的问题 returning 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** " Then '<~~~ MODIFY AS NEEDED ###
btn.click
Exit For 'break out of the loop
End If
Next