Напишите в поле ввода HTML с помощью Excel VBA

Я загружаю интернет-страницу и вхожу в систему с myusername и mypassword, используя VBA.

Я хотел бы написать поисковый запрос в поле ввода веб-страницы с помощью VBA.

Поскольку в поле ввода нет имени и идентификатора, у меня ничего не получилось.

Вот мой код:

Sub MyLogin()

Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
With IE
    .Visible = True
    .navigate "https://www.example.com"

    Do Until .readyState = 4
        DoEvents
    Loop

    .document.all.Item("username").Value = "myusername"
    .document.all.Item("password").Value = "mypassword"
    .document.forms(0).submit

End With

Do Until IE.readyState = 4
    DoEvents
Loop

Dim inputfield As HTMLInputElement
For Each inputfield In IE.document.getElementsByTagName("input")
    If inputfield.Type = "text" Then inputfield.Value = "mysearch"
Next

Do Until IE.readyState = 4
    DoEvents
Loop

End Sub

Поле HTML, которое я хочу заполнить:

input class = "input-inboxsearch form-control" type = "text" value = "" placeholder = "Nom, email" maxlength = "71"

Как я могу установить значение поля ввода?


person dupont    schedule 06.08.2016    source источник
comment
Попробуйте вместо этого использовать getElementsByClassName ("input-inboxsearch form-control"),   -  person Miqi180    schedule 06.08.2016


Ответы (1)


В дополнение к комментарию @ Miqi180 вы можете попробовать заменить свой раздел кода, начинающийся с Dim inputfield As HTMLInputElement, следующим образом:

Dim inputfield As Object
Set inputfield = IE.document.getElementsByClassName("input-inboxsearch form-control")
If inputfield.length > 0 Then
    inputfield(0).Value = "mysearch"
End If

'carry on with your code

Метод getElementsByClassName вернет коллекцию, поэтому вам нужно проверить ее length, а затем получить доступ к элементам коллекции. Если есть только один элемент с этим классом, вы можете ссылаться на 0-й элемент коллекции.

Я установил переменную inputfield как Object, потому что вы, похоже, используете позднее связывание.

person Robin Mackenzie    schedule 07.08.2016
comment
Спасибо за вашу помощь. Я сделал модификации. Сообщение об ошибке отсутствует. Однако ничего не появляется в поле поиска. - person dupont; 08.08.2016
comment
Когда я debug.print inputfield.length, он возвращает 0. Есть ли что-то, что может помешать процессу getelementsbyclass собирать данные? Когда я пробую этот процесс на веб-странице Google, он работает отлично. В очередной раз благодарим за помощь. - person dupont; 08.08.2016
comment
Может быть, вам нужно дважды проверить атрибут класса в поле ввода - вы уверены, что это input-inboxsearch form-control? Обычно это должно работать - я отмечаю, что ваш код уже перешел на страницу, а затем вошел в систему. Возможно, вам нужно проверить, что IE.document относится к вашей второй странице (после входа в систему), а не к первой (до входа в систему) . - person Robin Mackenzie; 09.08.2016
comment
Большое спасибо за вашу помощь. Атрибут класса правильный. Я думаю, что существует конфликт между двумя веб-страницами, как вы сказали (до входа в систему и после входа в систему). Стоит ли переименовать вторую веб-страницу? Любые советы о том, как это сделать, были бы очень признательны. Предоставленная до сих пор помощь была чрезвычайно полезной. Спасибо соавторам. - person dupont; 10.08.2016