VBA/IE:如何使用VBA单击网站上的按钮

VBA/IE:如何使用VBA单击网站上的按钮,vba,internet-explorer,click,internet-explorer-10,Vba,Internet Explorer,Click,Internet Explorer 10,我是VBA新手,希望这里有人能在以下方面帮助我: 我想使用VBA打开一个网站,然后单击该网站上的两个不同按钮 我面临的挑战是: 1) 如何告诉代码等待网页完全加载,以便确保要单击的按钮实际可见? 2) 如何使用按钮的唯一ID正确寻址 到目前为止我的代码: Dim varResults As New DataObject Dim varButtonID As String Dim i As Long Dim objIE As Object Dim objElement As Object Dim

我是VBA新手,希望这里有人能在以下方面帮助我:

我想使用VBA打开一个网站,然后单击该网站上的两个不同按钮

我面临的挑战是:
1) 如何告诉代码等待网页完全加载,以便确保要单击的按钮实际可见?
2) 如何使用按钮的唯一ID正确寻址

到目前为止我的代码:

Dim varResults As New DataObject
Dim varButtonID As String
Dim i As Long
Dim objIE As Object
Dim objElement As Object
Dim objCollection As Object

varResults.SetText TxtSql.Text
varResults.PutInClipboard

' assign button ID
varButtonID = "Oracle_setExplainOptionsSpan"

' create IE object
Set objIE = CreateObject("InternetExplorer.Application")

With objIE
    .navigate "https://myURL"
    .Visible = True
End With

While objIE.ReadyState <> 4: Wend

objIE.document.getElementById(varButtonID).Click
Dim varResults作为新数据对象
Dim varButtonID作为字符串
我想我会坚持多久
模糊对象
作为对象的模糊对象
作为对象的Dim OBJ集合
varResults.SetText TxtSql.Text
varResults.PutInClipboard
'分配按钮ID
varButtonID=“Oracle\u设置解释选项span”
'创建IE对象
Set objIE=CreateObject(“InternetExplorer.Application”)
与奥布杰
.导航“https://myURL"
.Visible=True
以
而objIE.ReadyState 4:Wend
objIE.document.getElementById(varButtonID)。单击
非常感谢您在此方面的帮助,
Mike

您可以尝试按类名查找按钮,然后单击按钮

With ie.document
    Set elements = .getelementsbytagname("input")
    For Each e In elements
        If (e.getattribute("className") = "btnComment") Then
            e.Click
            Exit For
        End If
    Next e
End With
我想不出VBA命令会一直等到页面加载,但您可以输入一个等待时间固定的等待语句

Application.Wait(Now + #0:00:01#)

您可以尝试按类名查找按钮以单击按钮

With ie.document
    Set elements = .getelementsbytagname("input")
    For Each e In elements
        If (e.getattribute("className") = "btnComment") Then
            e.Click
            Exit For
        End If
    Next e
End With
我想不出VBA命令会一直等到页面加载,但您可以输入一个等待时间固定的等待语句

Application.Wait(Now + #0:00:01#)

我总是使用Do While循环等待页面加载后再继续

Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
在IE.ReadyState ReadyState\u完成时执行
环

我总是使用Do While循环等待页面加载后再继续

Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
在IE.ReadyState ReadyState\u完成时执行
环

Hi Svekke,非常感谢您的快速回复。应用程序。等待是完美的。我不能按ID而不是按类/标记名设置button元素吗?当然,只需使用“ID”而不是classname,看看这个例子:再次感谢!如果我使用ID,那么我不需要遍历所有其他元素,因为这唯一地标识了元素,对吗?它遍历所有具有
输入
标记的元素,并且只单击具有正确ID的按钮。谢谢,很抱歉,我不得不再次询问,因为这对我来说是新的。我只是想知道为什么我需要一个循环,不能像在JS中那样直接单击特定元素。嗨,Svekke,非常感谢您的快速回复。应用程序。等待是完美的。我不能按ID而不是按类/标记名设置button元素吗?当然,只需使用“ID”而不是classname,看看这个例子:再次感谢!如果我使用ID,那么我不需要遍历所有其他元素,因为这唯一地标识了元素,对吗?它遍历所有具有
输入
标记的元素,并且只单击具有正确ID的按钮。谢谢,很抱歉,我不得不再次询问,因为这对我来说是新的。我只是想知道为什么我需要一个循环,而不能像在JS中那样直接单击特定元素