2016-11-26 4 views
0

Ich möchte meinen Lieferstatus für meine regulären Kurier von verschiedenen Dienstleister wie Blue Dart zu automatisieren.nicht EXPORT Daten von aktuellen offenen Webseite mit VBA

Ich habe Docket-Nummern; Ich habe das gleiche mit VBA versucht, aber es ist nicht in der Lage, Daten von der Webseite zu holen.

Mein Code geben Sie die Docket-Nummer aus der Zelle auf der Startseite ein, dann wird auf eine andere Seite umgeleitet, auf der der Lieferstatus in der Tabelle angegeben ist.

Sub GetCourseList() 

Dim IE As Object 
Set IE = CreateObject("InternetExplorer.Application") 

Dim IEWindows   As SHDocVw.ShellWindows 
Dim IEwindow   As SHDocVw.InternetExplorer 
Dim IEDocument   As MSHTML.HTMLDocument 
Dim BreadcrumbDiv  As MSHTML.HTMLElementCollection 

Set IEWindows = New SHDocVw.ShellWindows 

'create new instance of IE. use reference to return current open IE if 
'you want to use open IE window. Easiest way I know of is via title bar. 
    IE.Navigate "http://www.bluedart.com/maintracking.html" 
'go to web page listed inside quotes 
    IE.Visible = True 
    While IE.busy 
    DoEvents 'wait until IE is done loading page. 
    Wend 
    IE.Document.All("numbers").Value = ThisWorkbook.Sheets("sheet1").Range("A1") 
    Application.SendKeys "~" 

    Dim URL As String 
    Dim qt As QueryTable 
    Dim ws As Worksheet 

    Set ws = Worksheets.Add 
    For Each IEwindow In IEWindows 
    If InStr(IEwindow.LocationURL, "your URL or some unique string") <> 0 Then ' Found it 
    Set IEDocument = IEwindow.Document 

    URL = IEwindow.LocationURL 

    Set qt = ws.QueryTables.Add(_ 
    Connection:="URL;" & URL, _ 
    Destination:=Range("F1")) 

     With qt 
     .RefreshOnFileOpen = True 
     .Name = "bluedart" 
     .FieldNames = True 
     .WebSelectionType = xlAllTables 
     .Refresh BackgroundQuery:=False 

    End With 
End If 
Next 
End Sub 
+0

Wir haben keine Werte von Ihrem Blatt, um es zu testen, und es gibt keine Erwähnung, was genau nicht funktioniert. Haben Sie einen Fehler in einer Zeile? Verwenden Sie auch 'Option Explicit' oben auf der Prozedur 'While IE.busy oder IE.Readystate <> 4', 'ThisWorkbook.Sheets (" sheet1 "). Bereich (" A1 "). Value2' und vermeiden Sie' SendKeys' wie es nicht zuverlässig ist. Dies sind nur gute Praktiken, keine direkte Lösung für dieses spezielle Problem. –

+0

ZB von Docket-Nummer zum Verfolgen von 50419480764 oder 50419669171; Ich bekomme keinen Fehler, aber es holt nicht die Daten, als ob es leer ist – Eager

Antwort

0

Ihr Code versucht nicht, mit einer Seite zu interagieren, die nach der Eingabe der Docket-Nummer generiert und in irgendeiner Weise bestätigt wurde. Es könnte geschehen durch:

emulieren Browser-Interaktion, kann Internet Explorer sein: Klicken Sie auf „Go“ Element auf der Seite nach Registernummer eingegeben und Verwendung wurde:

While IE.Busy Or IE.Readystate <> 4 
    DoEvents 
Wend 

Es kann auch durch die Schaffung erreicht werden POST-Anfrage mit korrekten Parametern, einschließlich der Kassennummer.

Auch nach diesem erreicht ist, wird es noch nicht möglich, Daten durch Abfrage von dieser Seite zu bekommen, da die entsprechende URL, ist dies:

http://www.bluedart.com/servlet/RoutingServlet

Versuchen Sie diesen Link zu öffnen. Es wird nichts angezeigt, da der Inhalt dieser URL über die POST-Methode generiert wird und Parameter, die zum korrekten Generieren von Inhalt benötigt werden, nicht in der URL enthalten sind.

Anstelle der Abfrage kann auf Daten zugegriffen werden, indem HTML-Elemente, wie Tabellen, für die beiden genannten Methoden im HTML-Dokument gesucht werden.

+0

, Thanks for reply. Ja, das ist das Problem, da es über eine Post-Methode aufruft. So wollte ich die Daten von der aktuell geöffneten Seite im IE holen. Wie kann ich das erreichen? – Eager

Verwandte Themen