Получение информации со страницы HTML через VBA

1

Из VBA я пытаюсь получить доступ к ячейке "имя пользователя" с веб-страницы, чтобы я мог ввести соответствующее имя пользователя.

Проблема в том, что в HTML-коде со страницы имеется более одного элемента с тем же именем, что и "LOGON_USERID", и я не могу понять, как получить доступ к правильному.

Как вы можете видеть на изображении "часть HTML-кода", строка, к которой я пытаюсь получить доступ, является выделенной, но есть еще два элемента, которые имеют одно и то же имя над ним.

часть HTML-кода

Я пробовал много разных способов (используя разные методы или типы переменных и т.д.), Но поскольку я не знаком с HTML, мне не удается получить то, что я хочу.

Sub  Pum()    

Dim ie As New InternetExplorer
'Dim IEDoc As IHTMLElementCollection
Dim IEDoc As HTMLDocument
Dim name As Object
Dim nameList As HTMLInputElement
Dim WRONGS As DispHTMLElementCollection
Dim Elems As HTMLElementCollection
Dim i As Integer

ie.navigate "thewebsiteinquestion"


ie.Visible = False


WaitIE ie


Set IEDoc = ie.document
'MsgBox IEDoc.DocumentElement.
'Elems = IEDoc.getElementsByTagName("INPUT")
 MsgBox TypeName(IEDoc.getElementById("LOGON_USERID").all)
Set Elems = IEDoc.getElementById("LOGON_USERID")
 'For i = 0 To 5
 MsgBox Elems.Length
'Next i
 For Each name In Elems.Children
 MsgBox name.nodeName
 MsgBox name.Attributes
 MsgBox name.all

Next


'If ((NameStr Isnot Nothing And (NameStr.Length <> 0)) Then
'If NameStr = "LOGON_USERID" Then
'If TypeName(IEDoc.all("LOGON_USERID")) = "HTMLInputElement" Then


    'MsgBox TypeName(IEDoc.all("LOGON_USERID"))
    'Set names = IEDoc.all.Item("text")
    'TypeName (InputUsernameTextzone)
    'Dim Question As IHTMLElement
    'Question = InputUsernameTextzone.parentElement
   'MsgBox TypeName(InputUsernameTextzone.parentElement.getAttribute("name"))
  'InputUsernameTextzone.parentElement

    'CELLULE.value = "qtc2464"



  WaitIE ie


  Set ie = Nothing
  Set IEDoc = Nothing

End Sub

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

Если вам нужна дополнительная информация, дайте мне знать.

  • 0
    Автоматизация таким способом может быть сложным делом. Особенно, если вы не являетесь владельцем сайта. Каждый раз, когда сайт обновляется, ваш код будет подвержен риску сбоя. Публикует ли веб-сайт API, который вы могли бы использовать вместо этого?
  • 0
    @destination-data destination-data: эй, в основном это веб-страница компании, в которой я работаю, и моя идея состояла в том, чтобы получить доступ к данным напрямую с помощью макроса, чтобы обновления могли выполняться автоматически. Единственное, что мы должны предоставить на этой странице, это имя пользователя и наш пароль. Я не знаком с термином APi, но после поиска его значения, я думаю, нет таких вещей, которые я мог бы использовать.
Теги:

2 ответа

0
Лучший ответ

Остальные два элемента ввода имеют различный тип (они скрыты), поэтому вы можете использовать querySelector с атрибутом type=text чтобы найти нужный элемент.

Dim userid As HTMLInputElement
Set userid = IEDoc.querySelector("input[name='LOGON_USERID'][type='text']")

If Not userid Is Nothing Then
    ' Continue with user id element
Else
    MsgBox "LOGON_USERID not found on the page"
End If
  • 0
    РЕДАКТИРОВАТЬ: Это работает! Огромное спасибо. Я был буквально на этом в течение 8 часов, я клянусь!
  • 0
    Добро пожаловать!
0

Я новичок в этом, но если это может помочь кому-то, здесь упрощенная версия макроса, который я сделал:

Sub Access_Puma()

Dim ie As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim userid As HTMLInputElement
Dim userpwd As HTMLInputElement
          ie.navigate "thewebsitetoaccess"

ie.Visible = True


WaitIE ie

  Set IEDoc = ie.document

Set userid = IEDoc.querySelector("input[name='LOGON_USERID'][type='text']")
If Not userid Is Nothing Then
userid.value = "myusername"
Else
MsgBox "LOGON_USERID not found on the page"
End If

Set userpwd = IEDoc.querySelector("input[name='LOGON_PASSWD'][type='password']")
If Not userpwd Is Nothing Then
userpwd.value = "mypassword"
Else
MsgBox "LOGON_PASSWD not found on the page"
End If
End Sub

Ещё вопросы

Сообщество Overcoder
Наверх
Меню