python 12306自动抢票

12306自动抢票

一、使用工具

1、Google Chrome 浏览器

2、fiddler4抓包工具

3、pycharm

4、python3.6

二、抓取网页请求

1、首先打开Google Chrome 浏览器完成一遍买票过程,登录--查询--买票。使用fiddler抓包工具抓取。

#登录网站:

https://kyfw.12306.cn/otn/login/init

三、详细分析

1、登录

验证码校验:https://kyfw.12306.cn/passport/captcha/captcha-check

校验成功如下:圈出来的就是所需要输入的验证码,其实就是正确答案的坐标 

这个验证码坐标可以通过以下方式获取: 1、手动输入 2、自动识别(http://littlebigluo.qicp.net:47720),打开这个页面你就懂了。

密码校验:https://kyfw.12306.cn/passport/web/login

返回给我一个这个玩意儿,不知道干嘛的,留着呗 uamtk=p5sbjTadftLXTWk4D1PopeKUsOSGGw6qKrasNZyTUeQnx1110

https://kyfw.12306.cn/passport/web/auth/uamtk

返回: newapptk=J0_e7wT42T96NRjEHRDgRtJi0DzmNXpzbAldAZZVgUE731110

https://kyfw.12306.cn/otn/uamauthclient

这不newapptk这个玩意儿就用上了

到这里已经返回了正确的用户名了,算是成功登陆了。 我们可以访问下下面两个页面试试。 https://kyfw.12306.cn/otn/view/index.html https://kyfw.12306.cn/otn/index/initMy12306

2、余票查询

登录好了就开始查票

https://kyfw.12306.cn/otn/leftTicket/queryX?leftTicketDTO.traindate=2019-04-04&leftTicketDTO.fromstation=RQW&leftTicketDTO.tostation=IZQ&purposecodes=ADULT

我们选择D1801这趟车 CrFDowh0bnbtKqq0rRcDgziY%2B0SoJKJRLttdCZ1GmAgdASdLY%2FRLgJecq0FtY52GcUSF8dRXxzM8%0AHAe%2BHc7bB8tdlAFSD5lC3ZDb7N%2BAizlYTGrFY1JeQfgzixu51UsAuYLt3DXmnq%2BIqxd2D8zIlGtS%0AnbifCQoIaY9Z9GJLeIQyOERSfMwtp1V8Rg84W89eQmCbYLyDRCB8PCUZ8X8d9KixIu9fuywpa1%2Fn%0A4btDGq79FsKwMSthrVIts3xuz0NauWcm5vfOoGDEv4YmRaXGu6kAyDKmtp054YZ9Zj6huQEPXwit%0A 这串东西我们先留着

https://kyfw.12306.cn/otn/login/checkUser

这里又进行了一次登录检查

https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest

开始提交我们的预订车次信息,刚那串长长的玩意儿丢到这里用

https://kyfw.12306.cn/otn/confirmPassenger/initDc

打印返回的text,一大堆看不懂的东西,放这儿吧

https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs

圈圈里面的东西,怎么获取呢 复制下来 到刚刚那个text里面去查询一下,还真有

https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo

&passengerTicketStr=O%2C0%2C1%2C%E6%9D%A8%E5%BB%BA%E9%94%8B%2C1%2C441223198703032012%2C%2CN&oldPassengerStr=%E6%9D%A8%E5%BB%BA%E9%94%8B%2C1%2C441223198703032012%2C1_

这堆东西又从哪里来呢 这么多%估计是url编码的,用 print(urllib.parse.unquote(string))给他翻译下,发现这就是我们乘车人的一些信息

https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs 访问这个网页时貌似得到过这些东西,提取一下就好了

https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount

又是一堆看不懂的参数。。。。 老规矩带%的丢到去翻译一下 leftTicket=kxUp7XgcTQj3YZbvwkh6xKaHiyHZoYxiSMaCDYK%252BJkh6wpD7 这个leftTicket实在是找不到从哪里获取了,又丢到上面text去find,果然又在这里。。。

https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue

除了keycheckisChange=1483D47DB73CEABDA70FC4E4B5A169C976A06CAA04B9C20504B59257 其它的貌似都能找到了,没办法又去text找呗,又一次找到了我们需要的东西

突然反应过来,这不已经提交订单了?

https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1552458550174&tourFlag=dc&jsonatt=&REPEATSUBMITTOKEN=7a8ee5c5f8a3ba4bd306781bae3e60e2

WaitTime?这不是让我们等待嘛,那就等呗

等待的结果就是orderId从orderId=(null)变成了orderId=E265371621

https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue

不用多说了吧 把上面的orderId丢过来

这已经是抢票的最后一步了,打开12306你会发现火车票已经在这等着你支付了

再接下来无非就是邮件、短信、qq、微信等提醒支付的操作了。

四、代码编写整合

有需要代码的朋友,留言评论哟。

你可能感兴趣的:(python 12306自动抢票)