Web刮 – VBAsearch参数无法正常工作

我正在从事一个网上抓取项目,这个项目可以从旅游网站上刮取票务信息。

我目前遇到一个问题,即在我的VBA代码中定义的search参数,然后input到要执行的网站不起作用。 下面提供了已经编写的代码。 为了提供一些背景知识,我正在从我的Excel工作簿(例如北京(北京))往返目的地,并且以网站期望input的相同格式(MM-DD-YYYY)定义旅行date但是在运行的时候,网站似乎没有认出这个参数,并且指着我一个页面说“ 网站正在维护中 ”,奇怪的是,当我手动input参数的时候,站点会识别它并提供票务信息。

我可能错过了什么? 我需要更新“出发城市”,“到达城市”和“出发date”之外的其他值吗?

我也注意到,当我通过多个城市循环时,网站search与之前定义的相同的参数(即,如果search上海 – >北京,则产生天津 – >我之前search的北京)。 有没有办法通过VBA自动删除search历史logging/caching?

' save from and to destinations under a defined string sFrom = Range("C3").Value sTo = Range("C4").Value ' "i" to track the # of days out as defined by the user For i = 0 To cntDays dtRange = Date + i ' establish date to pull train ticketing information on If Len(Day(dtRange)) = 1 Then sDay = "0" & Day(dtRange) Else: sDay = Day(dtRange) End If If Len(Month(dtRange)) = 1 Then sMonth = "0" & Month(dtRange) Else: sMonth = Month(dtRange) End If sDate = sMonth & "-" & sDay & "-" & Year(dtRange) ' instantiate the oIE object Set oIE = CreateObject("InternetExplorer.Application") ' open Ctrip travel portal sURL = "http://english.ctrip.com/trains/#ctm_ref=nb_tn_top" With oIE .navigate sURL .Visible = True Do Until (.readyState = 4 And Not .Busy) DoEvents Loop ' search for particular entry .document.getElementsByName("DepartureCity")(0).Value = sFrom .document.getElementsByName("ArrivalCity")(0).Value = sTo .document.getElementsByName("DepartDate")(0).Value = sDate MsgBox sFrom MsgBox sTo MsgBox sDate Set ElementCol = .document.getElementsByTagName("button") For Each btnInput In ElementCol If btnInput.innerText = "Search" Then btnInput.Click Exit For End If Next btnInput ' ensure page has been fully loaded Do Until (.readyState = 4 And Not .Busy) DoEvents Loop 

仔细观察一下,该站点使用GET请求来执行search。
因此,不需要加载页面,填充字段,然后单击button。
您可以直接在URL中设置值,并绕过初始页面。

例如,要search2015年12月9日从上海到北京的火车,请加载以下URL …

http://english.ctrip.com/trains/List/Index?DepartureCity=shanghai%28%E4%B8%8A%E6%B5%B7%29&ArrivalCity=beijing%28%E5%8C%97%E4%BA% AC%29&DepartDate = 2015年12月9日&DepartureStation =%E4%B8%8A%E6%B5%B7&ArrivalStation =%E5%8C%97%E4%BA%AC

当分解看起来像这样…

http://english.ctrip.com/trains/List/Index
DepartureCity =上海%28%E4%B8%8A%E6%B5%B7%29
ArrivalCity =北京%28%E5%8C%97%E4%BA%AC%29
DepartDate = 2015年12月9日
DepartureStation =%E4%B8%8A%E6%B5%B7
ArrivalStation =%E5%8C%97%E4%BA%AC

从我自己的testing,我已经确定,每个上述领域是必需的,或者你得到“维修”屏幕…

这意味着你也需要知道工作站的代码。

此外,您必须提供名称中的特殊字符…

shanghai%28%E4%B8%8A%E6%B5%B7%29