2017-02-02 21 views
1

Я новичок в VBA и надеюсь, что кто-то здесь может помочь мне следующее:VBA/IE: Как использовать VBA нажать кнопку на веб-сайте

Я хотел бы использовать VBA, чтобы открыть веб-сайт, а затем нажмите две разные кнопки на этом веб-сайте.

Мои проблемы с этим являются:
1) Как я могу сказать код, чтобы ждать, пока веб-страница не будет полностью загружена, так что я могу убедиться, что кнопка, которую я хочу, чтобы нажать на самом деле видно?
2) Как правильно обращаться к кнопке с помощью уникального идентификатора?

Мой код до сих пор:

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 

Большое спасибо заранее за любую помощь в этом, Майк

+0

Заканчивать http://stackoverflow.com/questions/3275515/how-to-wait-until-webbrowser-is-completely-loaded-in-vb-net – Takarii

ответ

0

Вы можете попытаться найти кнопку по имени класса, чтобы нажать на кнопку.

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#) 
+0

Привет Svekke, Большое спасибо за быстрый ответ. Приложение Application.Wait идеально. Не могу ли я установить элемент кнопки по ID вместо имени класса/тега? – Mike

+0

Конечно, просто используйте «id» вместо имени класса, посмотрите на этот пример: https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute – Svekke

+0

Еще раз спасибо! Если я использую идентификатор, мне не нужно перебирать все остальные элементы, так как это однозначно идентифицирует элемент, верно? – Mike

0

Я всегда использую цикл Do While, чтобы дождаться загрузки страницы перед продолжением.

Do While IE.ReadyState <> READYSTATE_COMPLETE 
Loop 
Смежные вопросы