总结一下用python+selenium抢12306票的小程序(最新)

前段时间买火车票老是需要让携程给我弄什么加速包来抢票,于是就想着自己弄一个抢票的小程序。刚开始本来也没打算用selenium来做,因为这个部署到服务器很麻烦,所以想着用requests+js2py来做,尝试了一下后发现从登陆到订票一系列的参数和跳转太多了,分析得我脑壳痛,于是不得已还是用了selenium+chromedriver,不得不说,嗯,真香!

我先说一下我的思路吧:
1、首先抛开登陆这个先不谈,先把简单的事儿做了。先尝试查询一下火车余票信息,这个其实可以用requests很简单的就能爬下来。当有余票信息后立马调用selenium。
2、对于selenium这部分来说主要是解决登录和订票问题,登录所需的验证码还是需要去找到地址爬取下来,然后人为去识别然后再在页面上获取其(x,y)值然后发送点击事件。这样是比较麻烦的一种做法,我想到一个简单的,就是用代码中实现在selenium上一次登录后记录下cookie值,写进文件里面,下次再需要的时候直接读取cookie值发送过去就行了。
3、订票的过程没什么好说的,按照页面点击就行。
4、最后由于订到票之后会有30分钟的付款时间,所以可以做一个邮件提醒功能,或是手机短信提醒,这样就能及时的付款了,还能调用微信的接口,给自己发条微信,也是可以的。

具体先看查询余票,12306有自己的一长串城市和城市代码的map,就是下面这个,我写了一个方法,方便返回城市名或城市代码。

station_map = '@bjb|北京北|VAP|beijingbei|bjb|0@bjd|北京东|BOP|beijingdong|bjd|1@bji|北京|BJP|beijing|bj|2@bjn|'
def get_city_or_citycode(city):
    for i in station_map.split( '@'):
        if i:
            tmp = i.split( '|')
            if city == tmp[1]:
                return tmp[2]
            elif city==tmp[2]:
                return tmp[1]

    return False

然后就可以发送请求了
 

import requests,json
from city_map import get_city_or_citycode
headers={
'Accept':'*/*',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.9',
'Cache-Control':'no-cache',
'Connection':'keep-alive',
'Host':'kyfw.12306.cn',
'If-Modified-Since':'0',
'Referer':'https://kyfw.12306.cn/otn/leftTicket/init',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'X-Requested-With':'XMLHttpRequest'
}
def query_ticker(riqi="2018-12-31",from_sta='北京',to_sta="上海"):
    from_sta=get_city_or_citycode(from_sta)
    to_sta=get_city_or_cityco
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值