2016-10-31 22 views
1

VBAから、適切なユーザー名を入力できるように、Webページから「ユーザー名」セルにアクセスしようとしています。VBAからのHTMLページからの情報の取得

問題は、ページのHTMLコードに "LOGON_USERID"という名前の複数の要素があり、正しい方法にアクセスする方法がわかりません。

画像の「HTMLコードの一部」からわかるように、私がアクセスしようとしている行は強調表示されていますが、その上に同じ名前の2つの要素があります。

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 

私は別の方法を使って2つの同様のコードを試しましたが、まだ結果はありません。うまくいけばあなたは私を助けることができる。

詳細が必要な場合はお知らせください。

+0

の自動化が難しいビジネスすることができます。特にあなたがウェブサイトを所有していない場合。ウェブサイトが更新されるたびに、あなたのコードは失敗する危険があります。代わりに使用できるAPIをウェブサイトで公開していますか? –

+0

@ destination-data:基本的にこれは私が働いている会社のウェブページです。私の考えは、更新を自動的に行うことができるように、マクロを使って直接データにアクセスすることでした。このページで提供する必要があるのは、ユーザー名とパスワードのみです。私はAPiという用語に精通していませんが、その意味を捜した後、私は使用できるものはないと思います。 – Seb

答えて

0

他の2つの入力要素はタイプが異なります()ので、type=textの属性を持つquerySelectorを使用して目的の要素を見つけることができます。

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時間私は誓う! – 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 
関連する問題