2016-10-31 2 views
1

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

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

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

part of the HTML code

Я пробовал много разных способов (с использованием различных методов и типов переменных и т.д.), но так как я не знаком с 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

Automating таким образом может быть непростым делом. Особенно, если у вас нет собственного сайта. Каждый раз, когда сайт обновляется, ваш код будет подвержен риску неудачи. Создает ли веб-сайт API, который вы могли бы использовать вместо этого? –

+0

@ данные назначения: эй, в основном это веб-страница от компании, в которой я работаю, и моя идея заключалась в доступе к данным непосредственно с макросом, чтобы обновления могли выполняться автоматически. Единственное, что мы должны предоставить на этой странице, это имя пользователя и пароль. Я не знаком с термином APi, но после поиска его смысла я думаю, что нет таких вещей, которые я мог бы использовать. – Seb

ответ

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

EDIT: Он работает !! Огромное спасибо. Я был буквально на этом за хорошие 8 часов, клянусь! – Seb

+0

Добро пожаловать! – dee

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 
Смежные вопросы