专栏首页python爬虫实战之路12306自动刷票下单-下单

12306自动刷票下单-下单

下单

进入下单界面了 https://kyfw.12306.cn/otn/confirmPassenger/initDc

还有一个请求https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs

仔细看一下返回值,是我们常用联系人的信息,要下单肯定得选乘客信息嘛。这也是一个post请求,这个REPEAT_SUBMIT_TOKEN=8273d204078ad491f0face93d5c878b9很奇怪,记住,肯定是在它之上的请求中获取的,

,很幸运我们看它上面的那个请求initDc中就出现了,没错值是一样的,又搞定一个

选乘客票种提交

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

看看参数,头晕吗?抹掉的是姓名身份证电话信息,除了REPEAT_SUBMIT_TOKEN和空参数,其他的一头雾水,你发现REPEAT_SUBMIT_TOKEN和上面的不一样了是吧,其实是一样的,因为我是写完一部分才进行下面的操作,时间长导致登录失效,所以提交的时候要求重新登录,这个REPEAT_SUBMIT_TOKEN参数就不一样了,也说明这个参数是每次都变化的。 请求有发送的地方,这些参数也必然有填充的地方,向上找,不要放过任何一个请求,css和img请求就算了,然后我们找到了https://kyfw.12306.cn/otn/resources/merged/passengerInfo_js.js?scriptVersion=1.9053 格式化一下,最好是找在线格式化JavaScript代码的,效果更好

前两个参数搞定了,然后再看一下getpassengerTickets和getOldPassengers函数

passengerTicketStr:O,0,1,xxx,1,xxxxx,xxxxx,N 座位类型,0,票类型(成人/儿童),name,身份类型(身份证/军官证....),身份证,电话号码,保存状态 跟上面这些一一对应一下,还有一个下划线,等你选择两个乘客的时候你就知道了 oldPassengerStr自己分析一下吧

再看下面的请求https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount

train_date时间不用解释了,train_no好像跟车次有关哦,对于未知的参数,我们一般先看前面请求的返回值,然后才是document和js请求,从查票请求的拆分结果来看2对应的就是这个,那么下面的车次信息也有了,seatType座位类型

起始站编号和目的地编号我们也知道,train_location可以在查票信息中找到第15个,这里主要看一下leftTicket参数,同样的道理,在之前的请求中查找,我们发现initDc这个请求中搜到了这个值,key_check_isChange在下面用到(主要是看value值,这里为了截图重新截的图,所以value值不一样,正常的情况是一样的,不用担心)

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

看一下请求参数,所有参数在之前都找到了,包括key_check_isChange

下一个请求 https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1512295210042&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=56d3de8fe05b24a2daa92c0351df6cd2

请求参数非常明显,random是随机参数,其他的不用再说了 下一个请求 https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1512295213365&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=56d3de8fe05b24a2daa92c0351df6cd2

EXM?跟上面的是同一个请求?请求确实一样,但是返回值不一样,看到了吗?orderId有值了,在下一个请求中用到了

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

好了请求发完了,打开浏览器看一下订单吧,如果出现未支付订单,恭喜你搞定了

补充一下我的执行结果,昨天订票次数用完了,最终执行结果忘了截图,截图重新运行一下,贴一下结果

番外:

  1. 有一些参数我在做的时候并没有详细去追根究底,如果你有兴趣可以看一看 https://kyfw.12306.cn/otn/resources/merged/queryLeftTicket_js.js?scriptVersion=1.9053

写博客的时候翻到了这个js,又在里面找到了一些参数的根源

  1. 我在写的时候碰到一个特别神奇的问题,给我搞蒙了参数问题可以看一看,千万不要犯我的这个错误
  2. 我在文章中提到的几个js请求,后面跟了scriptVersion参数,我发现这个更新等倒是挺频繁的,所以每次还是关注一下
  3. 我这个并没有做的特别详细,代码没有整理,没有异常处理,还有一个需求没有写就是判断哪一趟车的哪种票是不是有,能不能预订,毕竟我并不是要写一个非常健壮的抢票软件,就是练一练手,做做积累
  4. 高铁票是需要选座的,我只是订了普通的票。等以后再看吧,有需求再补上

总结

通过整篇文章想给大家提供一个思路,主要是对于请求的参数而言:

  • 首先你应该知道这个参数肯定是在当前请求之前出现的,至于是在哪个请求之后出现的这个就看情况了
  • 我们的参数无外乎就两种情况,一种是服务器发个客户端的,一种是客户端动态生成的。
  • 当我们在前面的请求中去查找参数的时候,我的查找顺序一般是先看xhr请求的返回值,因为这个数据是最纯净的,几乎没有垃圾数据。然后再从document请求中查找,这个里面一般是内嵌js数据,或者html数据,最后才从js请求中去分析数据,这是最麻烦的,也是现在很多反爬都钟情的一种方式。

我在文中很多地方都提到了这个过程,简单一笔带过,最后整体的把思路说一下,大家反过来再看一下文章,就会意会很多O(∩_∩)O~

本文分享自微信公众号 - python爬虫实战之路(gh_f26a568fdea8),作者:星星在线

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!

    大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据。 并且将...

    星星在线
  • Python爬虫-百度模拟登录(二)

    参数值都看到了,token、tt、dv、callback这些变化的参数我们都知道了吧,其他的参数固定,别问我为什么。这个logincheck注意到了吗?是不是有...

    星星在线
  • 知乎模拟登陆

    经常在简书上写作,写完后再发布到其他网站,非常麻烦,所以准备搞一下自动发布文章的工具。那么第一步先要模拟登陆几个网站。今天先从知乎开始。

    星星在线
  • 在线IDE推荐

    首推https://c9.io,支持多种语言,不过我在使用的时候遇到过python编译不通过的问题,应该是产生了不必要的缩进和空格,但是在浏览器里很难检查出来,...

    gojam
  • Hexo Customization

    故事尾音
  • 德勤CEO:无人车未必造成大量失业,反而会创造新的就业

    李杉 编译自 Quartz 量子位 出品 | 公众号 QbitAI ? △ 德勤CEO Cathy Engelbert 作者:德勤CEO Cathy Engel...

    量子位
  • NATS项目

    说明:NATS是一个开源、高性能、轻量级和安全的云原生消息传递系统。NATS是一个CNCF托管的项目。Apcera、百度、西门子、VMware、HTC和爱立信等...

    CNCF
  • 用es6快乐的写js代码

    ES6 提供的许多新特性。用这些新特性,我们能在不降低代码可读性与维护性的基础上畅快地写 JavaScript~

    前端老鸟
  • 带你玩转ECMAScript 6,助力你写出高效漂亮的代码

    ES6 提供的许多新特性。用这些新特性,我们能在不降低代码可读性与维护性的基础上畅快地写 JavaScript~

    前端老鸟
  • 互联网人必备:推荐4款爬虫抓包神器

    受疫情影响,相信大部分人仍然还是处于在家远程办公的状态,起初最简单的远程办公,就是打打电话,发发微信,我们每天都在做。后来有了一系列工具,比如企业微信、各种线上...

    测试开发技术

扫码关注云+社区

领取腾讯云代金券