我正在开展网络抓取项目,该项目将从旅游网站上删除票务信息。
我目前遇到的问题是,我的VBA代码中定义的搜索参数以及稍后输入到要执行的网站中的搜索参数不起作用。已编写的代码如下所示。为了提供一些背景知识,我正在阅读我的Excel工作簿(例如北京)的往返目的地,并以相同的格式(MM-DD-YYYY)定义旅行日期,因为网站希望输入但是,在运行时,网站似乎无法识别参数,并将我引导到“维护中的网站”的页面。奇怪的是,当我手动输入参数时,网站会识别它并提供票务信息。
我可能错过了什么吗?我是否必须更新“DepartureCity”,“ArrivalCity”和“DepartDate”之外的其他值?
我还注意到,当我遍历多个城市时,该网站会搜索与之前定义的相同的参数(即,如果搜索上海 - >北京,它会产生天津 - >我之前搜索过的北京)。 有没有办法通过VBA自动删除搜索记录/缓存?
' 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
答案 0 :(得分:1)
仔细观察,该网站使用GET请求来执行搜索 因此,无需加载页面,填充字段,然后单击按钮 您可以直接在URL中设置值并绕过初始页面。
例如,要搜索2015年9月9日从上海到北京的火车,请加载以下网址...
当分解时看起来像这样......
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
到达站=%E5%8C%97%E4%BA%AC
从我自己的测试中,我已经确定上述每个字段都是必需的,或者你得到了“维护”屏幕......
这意味着您还需要知道电台代码。
此外,您必须提供名称中的特殊字符...
shanghai%28%E4%B8%8A%E6%B5%B7%29