Поиск определенного HTML-тега с помощью VBA

#html #vba

#HTML #vba

Вопрос:

Я пытаюсь перейти на определенную страницу на веб-сайте. При первом открытии страницы он запрашивает имя пользователя и пароль, и каждый раз после этого он запоминает меня и уже вошел в систему. Я знаю, как открыть браузер, как перейти на определенную страницу и как ввести имя пользователя и пароль в правильные места, все с использованием VBA. Я не хочу пытаться отправлять имя пользователя и пароль, когда я уже вошел в систему, потому что эти теги даже не будут существовать; полей для ввода этих вещей там нет. Что мне нужно знать, так это то, есть ли способ найти определенный тег, чтобы узнать, есть ли он на веб-странице в макросе VBA?

Редактировать: Итак, я решил свою проблему, просто используя «Далее возобновить работу с ошибкой», поэтому, если он столкнется с ошибкой при попытке ввода информации в элемент, который не существует, он просто перейдет к строке навигации по странице. Это может быть немного халтурно, и я буду продолжать искать более элегантное решение, но пока оно работает. Спасибо всем, кто ответил!

Комментарии:

1. можете ли вы опубликовать исходный HTML-код для тега?

2. Если элемент имеет атрибут Id, то вы можете использовать set el = doc.getElementById("theId") предполагая, что doc является ссылкой на загруженный в данный момент документ. el не будет ничего, если тега там нет.

3. Этот код работает для отправки имени пользователя и пароля IE.document.Forms(0).all("Login").Value = "generic_login" IE.document.Forms(0).all("Password").Value = "generic_password" IE.document.Forms(0).submit Поэтому могу ли я предположить, что «Login» и «Password» являются именами тегов? Если нет, я очень ценю любую помощь, которую вы можете оказать; я довольно новичок во всем HTML и совершенно новичок в объединении VBA и веб-страниц.

Ответ №1:

Если у вас есть полный HTML, загруженный в строковую переменную, вы можете сделать что-то вроде этого:

 Dim HasLogin As Boolean, HTMLSource As String

HasLogin = (InStr(HTMLSource, "<input name=""login"" id=""username"">") > 0)
  

Ответ №2:

Настройте цикл для каждого поля ввода в HTML-документе и проверьте имя, как показано ниже.

 Public Function isLoginScreen(IE As Object) As Boolean
  Set objCollection = IE.document.getElementsByTagName("input")
  Dim i As Long, b As Boolean
  b=False
  i = 0
  While i < objCollection.Length
    If objCollection(i).Name = "Login" Or objCollection(i).Name = "Password" Then 
        ' You found your element
        b=True
        Exit Function
    End If
    i = i   1
  Wend
End Function
  

Вы можете увидеть больше здесь:http://www.excely.com/excel-vba/ie-automation .shtml