12306 刷票腳本及防掛
一年一度的“搶票運動會”又開始了,期間12306網站承受的壓力越來越大,極不穩定。隨著人們對互聯網越來越熟悉,導致大量刷票軟件的用戶量猛增,大量的訪問將12306快壓垮了,以至于使用12306自家的刷票助手經常崩潰而無法繼續刷票。作為一名“資深”的程序員,我無法忍受了,所以果斷出手,寫了一段js來防掛。
本來想簡單的解決一下刷票自動掛的問題,后來想想寫都寫了,不如再增加幾個有用的功能。
現在腳本的功能有:
廢話不多說,直接上代碼吧:
//記錄等待時間 var waittime=0; //統計等待時間 function waitforRestart(){ if(!$("#autoSubmit").prop("checked"))return ; if($("#query_ticket").text()=="停止查詢"){ waittime++; } if(waittime>10){ $("#query_ticket").click(); setTimeout(function(){ waittime=0; if($("#query_ticket").text()=="查詢") { $("#query_ticket").click(); } },1000); } } //注冊回調方法 function callback(fun1,fun2){ fun1(); fun2(); } //添加乘車人 function addBuyer(name){ callback($.showSelectBuyer,function(){ $("#buyer-list li[p_value^="+name+"]").click(); $.closeSelectBuyer(); }); } //突破限制,添加車次 function addTrain(trainCode){ $("#prior_train").append('<span name="prior_train-span" class="sel-box w80">'+trainCode+'<a class="close" href="javascript:" onclick="$.removeSel(this,"'+trainCode+'",4)"></a></span>'); } //添加優先席別 function addSeat(seat){ callback($.showSelectSeat, function(){ $("#seat-list li[name^="+seat+"]").click(); $.closeSelectSeat(); }); } //自定義查詢區間 function addTimes(startTime,endTime){ $("#cc_start_time").append('<option value="'+startTime.replace(":","")+endTime.replace(":","")+'">'+startTime+'--'+endTime+'</option>'); $("#cc_start_time option:last").selected(); } //根據時間段、車次類型查詢所有滿足的車次。 function queryByTimeAndTrainType(){ callback($.showYxTrain, function(){ var yxTrainTimer = setInterval(function(){ if($("#filterTic").length>0){ $("#filterTic").prop("checked",true); $("#yxtrain_close").click(); clearInterval(yxTrainTimer); } },10); }); }
以上是提供了修改配置的方法,以下則根據需求自行配置,我們可以選定車次進行刷票,也可以根據時間段+車次類型刷該時間段內的某類車次。分開來說:
1. 根據車次進行刷票
具體操作:
//========================================== // 以下則根據需求自行配置: // 乘車人、車次、席別 // 僅顯示要刷的車次、查詢區間、刷新時間 //========================================== //選擇乘車人 addBuyer("張三"); addBuyer("'李四(成人)'"); addBuyer("'王五(學生)'"); //手動添加車次,按優先順序添加(輕松突破5車次限制) addTrain("G100"); addTrain("G101"); addTrain("G102"); addTrain("G103"); addTrain("G104"); addTrain("G105"); addTrain("G106"); addTrain("G107"); //添加優先席別,按優先順序添加 addSeat("二等座"); addSeat("一等座"); //自動刷新時間1s autoSearchTime=1000; //收起訂票助手 $(".up").click(); //啟動檢測防掛 var timer = setInterval(waitforRestart,autoSearchTime); //開始刷票 if($("#query_ticket").text()=="查詢"){ var timer2 = setInterval(function(){ if($("#auto_query").prop("checked") && $("#autoSubmit").prop("checked") && $("#filterTic").prop("checked")){ $("#query_ticket").click(); clearInterval(timer2); } },10); }
將以上修改好的內容貼到瀏覽器控制臺上(F12或者Ctrl+Shift+J)按回車執行。就可以自動開始刷票了。如果刷新請求timeout了,會由waittime記錄超時等待時間,>10時則會自動取消刷新,1秒后重新開始自動刷票。
2. 刷新某時間段內的特定車次類型的票,如刷新09:30-12:15之間所有高鐵+動車票
具體操作:
//========================================== // 以下則根據需求自行配置: // 乘車人、車次、席別 // 僅顯示要刷的車次、查詢區間、刷新時間 //========================================== //選擇乘車人 addBuyer("張三"); addBuyer("'李四(成人)'"); addBuyer("'王五(學生)'"); //添加優先席別,按優先順序添加 addSeat("二等座"); //手動設置查詢區間 addTimes("09:30","12:15"); //僅顯示高鐵+動車 $(".check[value='G']").prop("checked",true); $(".check[value='D']").prop("checked",true); //僅顯示時間段內的車次、僅顯示有票的車次,二選一 //注意,如果選擇了該項,則勾選的車次則無效了。 queryByTimeAndTrainType(); //自動刷新時間1s autoSearchTime=1000; //收起訂票助手 $(".up").click(); //啟動檢測防掛 var timer = setInterval(waitforRestart,autoSearchTime); //開始刷票 if($("#query_ticket").text()=="查詢"){ var timer2 = setInterval(function(){ if($("#auto_query").prop("checked") && $("#autoSubmit").prop("checked") && $("#filterTic").prop("checked")){ alert("123"); $("#query_ticket").click(); clearInterval(timer2); } },10); }
同樣粘貼在瀏覽器控制臺按回車執行即可。
是不是很簡單?有人會說簡單但是繁瑣。的確步驟有點多,那我就再提供已方法讓步驟簡化一下即可。那就是把上面修改過的內容,去掉注釋行(就是//開頭的行)然后把所有的換行都去掉,把所有內容縮到一行上。然后在前面加上javascript:,最后把它存放到書簽上,使用的時候,打開12306,然后點擊一下標簽即可自動刷票了。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答