我正在尝试使用VBA单击网页上的按钮。该按钮位于<button>
标记内,如下面的代码所示:
<div class="search-options-container">
<button class="aui-item aui-button aui-button-subtle search-button"
type="button" original-title="Search for Issues">
<span class="aui-icon aui-icon-small aui-iconfont-search">Search</span></button>
</div>
我目前使用的代码是:
Dim ieApp As New SHDocVw.InternetExplorer
Dim ieElement As Object
Dim oHTML_Element As IHTMLElement
...
Do While ieApp.Busy And Not ieApp.readyState = READYSTATE_COMPLETE
DoEvents
Loop
For Each oHTML_Element In ie.Document.getElementsByName("button")
Debug.Print ("REACHED")
If oHTML_Element.className = "aui-item aui-button aui-button-subtle search-button" Then
oHTML_Element.Click
End If
Next
这给了我一个对象所需的错误。我也尝试过使用:
ieElement = ieApp.Document.getElementsByTagName("button")
这也给出了一个对象所需的错误。
编辑:修正了用户Jordan指出的搜索字符串。 Debug.Print不执行,因此在查找带有.getElementsByName的元素时可能已经出现错误。在单击按钮之前,脚本已经能够打开页面并在搜索框中输入文本。
答案 0 :(得分:1)
首先,您正在搜索不存在的索引中的元素。在你提供的html示例中,没有名为&#34; button&#34;。
的元素集合其次,您在当前代码中搜索的类名是:
"aui-item aui-button-subtle search-button"
但是在你的html示例中,按钮的类名是:
"aui-item aui-button aui-button-subtle search-button"
尝试使用以下代码替换For
循环:
ieApp.Document.getElementsbyClassName("aui-item aui-button aui-button-subtle search-button")(0).Click
答案 1 :(得分:1)
以下是此类问题的典型示例。
http://vbadud.blogspot.com/2009/08/how-to-login-to-website-using-vba.html
以下是所有代码。
Dim HTMLDoc As HTMLDocument
Dim oBrowser As InternetExplorer
Sub Login_2_Website()
Dim oHTML_Element As IHTMLElement
Dim sURL As String
On Error GoTo Err_Clear
sURL = "https://www.google.com/accounts/Login"
Set oBrowser = New InternetExplorer
oBrowser.Silent = True
oBrowser.timeout = 60
oBrowser.navigate sURL
oBrowser.Visible = True
Do
' Wait till the Browser is loaded
Loop Until oBrowser.readyState = READYSTATE_COMPLETE
Set HTMLDoc = oBrowser.Document
HTMLDoc.all.Email.Value = "sample@vbadud.com"
HTMLDoc.all.passwd.Value = "*****"
For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
If oHTML_Element.Type = "submit" Then oHTML_Element.Click: Exit For
Next
' oBrowser.Refresh ' Refresh If Needed
Err_Clear:
If Err <> 0 Then
Debug.Assert Err = 0
Err.Clear
Resume Next
End If
End Sub