2017-06-02 19 views
1

特定のウェブサイトにアクセスして、入力を貼り付け、検索ボタンをクリックして検索結果からデータをコピーしているマクロを作成しようとしています。 不幸にも、わかっている限り、検索結果は動的に(JavaScriptでは?)用意されていますが、idがわからない場合はgetElementByIdなどのメソッドを使用する方法がわかりません。 https://www.tracktrace.dsv.com/newtracking/login.jspここで左の検索バーの内容で検索だ :VBA - 動的に作成されたウェブサイトのコンテンツを取得する

はここでウェブサイトのDSVAO72630 そして、私は例えば、結果に表示だ何かをキャッチしようとしています。出荷ID(検索結果の最上部にSHPTS ID:SMMA0019991があります)。ここに私のコードは、これまでのところです:

ここ
Option Explicit 

Sub Crawler() 
    Dim IE As InternetExplorerMedium 
    Dim URL As String 
    Dim HTMLDoc As HTMLDocument 
    Dim searchButton As Object 
    Dim searchBar As Object 

    Application.ScreenUpdating = True 
    Set IE = CreateObject("InternetExplorer.Application") 
    URL = "https://www.tracktrace.dsv.com/newtracking/login.jsp" 

    With IE 
     .Navigate URL 
     .Visible = True 
    End With 

    Do 
     DoEvents 
    Loop Until IE.readyState = READYSTATE_COMPLETE 

    Set HTMLDoc = IE.document 
    Set searchBar = HTMLDoc.getElementById("sid") 
    searchBar.Value = "DSVAO72630" 
    Set searchButton = HTMLDoc.getElementsByName("SEARCH") 
    searchButton.Item(0).Click 
End Sub 

答えて

2

が一つの方法です...

Option Explicit 

Sub Crawler() 
    Dim IE As Object, HTMLDoc As Object, searchButton As Object 
    Dim searchBar As Object, tbl As Object 
    Dim URL As String 
    Dim Ar As Variant 
    Dim i As Long 

    Set IE = CreateObject("InternetExplorer.Application") 
    URL = "https://www.tracktrace.dsv.com/newtracking/login.jsp" 

    With IE 
     .Navigate URL 
     .Visible = True 
    End With 

    Do: DoEvents: Loop Until IE.readyState = 4 

    Set HTMLDoc = IE.document 
    Set searchBar = HTMLDoc.getElementById("sid") 
    searchBar.Value = "DSVAO72630" 
    Set searchButton = HTMLDoc.getElementsByName("SEARCH") 
    searchButton.Item(0).Click 

    Wait 2 

    Set tbl = HTMLDoc.getElementsByTagName("TABLE")(2) 

    Ar = Split(tbl.Cells(1, 2).outertext, vbNewLine) 

    For i = LBound(Ar) To UBound(Ar) 
     If InStr(1, Ar(i), "SHPTS ID:") Then 
      Debug.Print Trim(Split(Ar(i), ":")(1)) 
      Exit For 
     End If 
    Next i 

    IE.Quit 

    Set IE = Nothing 
End Sub 

Private Sub Wait(ByVal nSec As Long) 
    nSec = nSec + Timer 
    While nSec > Timer 
     DoEvents 
    Wend 
End Sub 

スクリーンショット

enter image description here

+0

それは私の問題を解決し、ありがとうございます!私はちょうど興味があります...あなたが探しているデータを持つこの特定のテーブルがテーブル番号2(または3?0から始まってカウントされていますか? 'Set tbl = HTMLDoc.getElementsByTagName(" TABLE ")(2)'コード行について質問しています。 – Marcin

+0

私はそれをデバッグし、それを見つけました:) –

関連する問題