12306自動搶票
一渐北、使用工具
1香罐、Google Chrome 瀏覽器
2卧波、fiddler4抓包工具
3、pycharm
4庇茫、python3.6
二港粱、抓取網(wǎng)頁請求
1、首先打開Google Chrome 瀏覽器完成一遍買票過程港令,登錄--查詢--買票啥容。使用fiddler抓包工具抓取。
#登錄網(wǎng)站:
https://kyfw.12306.cn/otn/login/init
三顷霹、詳細(xì)分析
1咪惠、登錄
驗(yàn)證碼校驗(yàn):https://kyfw.12306.cn/passport/captcha/captcha-check
校驗(yàn)成功如下:圈出來的就是所需要輸入的驗(yàn)證碼,其實(shí)就是正確答案的坐標(biāo)?
這個驗(yàn)證碼坐標(biāo)可以通過以下方式獲攘艿怼: 1遥昧、手動輸入 2、自動識別(http://littlebigluo.qicp.net:47720)朵纷,打開這個頁面你就懂了炭臭。
密碼校驗(yàn):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這個玩意兒就用上了
到這里已經(jīng)返回了正確的用戶名了鞋仍,算是成功登陸了。 我們可以訪問下下面兩個頁面試試搅吁。 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
這里又進(jìn)行了一次登錄檢查
https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest
開始提交我們的預(yù)訂車次信息,剛那串長長的玩意兒丟到這里用
https://kyfw.12306.cn/otn/confirmPassenger/initDc
打印返回的text谎懦,一大堆看不懂的東西肚豺,放這兒吧
https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs
圈圈里面的東西,怎么獲取呢 復(fù)制下來 到剛剛那個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_
這堆東西又從哪里來呢 這么多%估計(jì)是url編碼的吸申,用 print(urllib.parse.unquote(string))給他翻譯下,發(fā)現(xiàn)這就是我們乘車人的一些信息
https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs 訪問這個網(wǎng)頁時貌似得到過這些東西,提取一下就好了
https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount
又是一堆看不懂的參數(shù)截碴。梳侨。。隐岛。 老規(guī)矩帶%的丟到去翻譯一下 leftTicket=kxUp7XgcTQj3YZbvwkh6xKaHiyHZoYxiSMaCDYK%252BJkh6wpD7 這個leftTicket實(shí)在是找不到從哪里獲取了猫妙,又丟到上面text去find瓷翻,果然又在這里聚凹。。齐帚。
https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue
除了keycheckisChange=1483D47DB73CEABDA70FC4E4B5A169C976A06CAA04B9C20504B59257 其它的貌似都能找到了妒牙,沒辦法又去text找唄,又一次找到了我們需要的東西
突然反應(yīng)過來对妄,這不已經(jīng)提交訂單了湘今?
https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1552458550174&tourFlag=dc&jsonatt=&REPEATSUBMITTOKEN=7a8ee5c5f8a3ba4bd306781bae3e60e2
WaitTime?這不是讓我們等待嘛,那就等唄
等待的結(jié)果就是orderId從orderId=(null)變成了orderId=E265371621
https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue
不用多說了吧 把上面的orderId丟過來
這已經(jīng)是搶票的最后一步了剪菱,打開12306你會發(fā)現(xiàn)火車票已經(jīng)在這等著你支付了
再接下來無非就是郵件摩瞎、短信、qq孝常、微信等提醒支付的操作了旗们。
四、代碼編寫整合
有需要代碼的朋友构灸,留言評論喲上渴。