无法使用VBA从当前打开的网页导出数据

时间:2016-11-26 18:49:15

标签: html excel vba excel-vba data-extraction

我希望通过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

1 个答案:

答案 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元素(例如表格)来访问数据,而不是查询。