使用VBA按网页上的按钮

时间:2016-09-08 08:01:04

标签: excel vba excel-vba internet-explorer

我正在尝试使用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的元素时可能已经出现错误。在单击按钮之前,脚本已经能够打开页面并在搜索框中输入文本。

2 个答案:

答案 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