我希望通过Blue Dart等各种服务提供商为我的常规快递自动提供送货状态。
我有Docket Numbers;我尝试使用VBA,但无法从网页上获取数据。
我的代码在主页的单元格中输入Docket编号,然后重定向到表格中提到交付状态的其他页面。
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 :(得分:0)
您的代码不会尝试与输入Docket Number并以任何方式确认后生成的页面进行交互。可以通过以下方式完成:
模拟浏览器交互,可以是Internet Explorer:在输入Docket Number后点击页面上的“Go”元素并使用:
While IE.Busy Or IE.Readystate <> 4
DoEvents
Wend
也可以通过使用适当的参数创建POST请求来实现,包括Docket Number。
即使达到此目的,仍然无法通过此页面的查询获取数据,因为其URL为:
http://www.bluedart.com/servlet/RoutingServlet
尝试打开此链接。什么都不会显示,因为此URL的内容是通过POST方法生成的,并且URL中不包含正确生成内容所需的参数。
对于我提到的两种方法,可以通过在HTML文档中查找HTML元素(例如表格)来访问数据,而不是查询。