#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