【发布时间】:2017-05-17 13:14:02
【问题描述】:
所以我正在尝试制作一个脚本来检查公共汽车的预订可用性。起始链接是https://reservation.pc.gc.ca/。
在保留框中需要选择以下内容:
- 预订:日间使用(带导游的徒步旅行、奥哈拉湖巴士)
- 公园:Yoho-Lake O'Hara
- 到货日期:6 月 16 日
- 聚会人数:2
输入这些选项后,它会将您带到以下页面:https://reservation.pc.gc.ca/Yoho-LakeO'Hara?Calendar
据我了解,如果我使用正确的数据向第二个链接发送 POST 请求,它应该返回我正在寻找的页面
如果我在选择正确参数时查看开发工具网络信息,则表单数据为:
__EVENTTARGET:
__EVENTARGUMENT: __VIEWSTATE:-非常长的字符串-
__VIEWSTATEGENERATOR: 8D0E13E6
ctl00$MainContentPlaceHolder$rdbListReservationType:事件
ddlLocations: 213a1bc9-9218-4e98-9a7f-0f209008e437**
ddlArrivalMonth: 2017-06-16
ddlArrivalDay: 19
ddlNights: 1
ddlDepartureMonth:
ddlDepartureDay:
ddl设备:
ddlEquipmentSub:
ddlPartySize:2
ctl00$MainContentPlaceHolder$chkExcludeAccessible:开启
ctl00$MainContentPlaceHolder$imageButtonCalendar.x: 64
ctl00$MainContentPlaceHolder$imageButtonCalendar.y: 56
所以我写的代码是:
import requests
payload = {
'__EVENTTARGET': '',
'__EVENTARGUMENT': '',
'__VIEWSTATE':-reallly long string-,
'__VIEWSTATEGENERATOR': '8D0E13E6',
'ctl00$MainContentPlaceHolder$rdbListReservationType': 'Events',
'ddlLocations': '213a1bc9-9218-4e98-9a7f-0f209008e437',
'ddlArrivalMonth': 2017-06-16,
'ddlArrivalDay': 19,
'ddlNights': 1,
'ddlDepartureMonth': '',
'ddlDepartureDay': '',
'ddlEquipment': '',
'ddlEquipmentSub': '',
'ddlPartySize': 2,
'ctl00$MainContentPlaceHolder$chkExcludeAccessible': 'on',
'ctl00$MainContentPlaceHolder$imageButtonCalendar.x': 64,
'ctl00$MainContentPlaceHolder$imageButtonCalendar.y': 56
}
r = requests.get(r"https://reservation.pc.gc.ca/Yoho-LakeO'Hara?Calendar", data=payload)
print r.text
r.text 最终只是第二个链接,就好像没有输入任何参数一样 - 就好像我只是向该链接发送了一个普通的 GET 请求。我尝试将整数的有效负载值转换为字符串,我尝试删除空键:值对。没运气。试图弄清楚我错过了什么。
【问题讨论】:
-
你能不能把
requests.get()改成requests.post() -
由于缩进的方式,您发布的代码将无法运行。尝试创建一个正确的minimal working example,可以在没有错误的情况下执行。
-
对不起,这是我的第一篇 SO 帖子,这不是我的 python 脚本中的缩进。让我尝试编辑它以正确显示。