12306刷票指令碼
阿新 • • 發佈:2018-11-24
我也在刷票,不過發現12306還是發生了一些變化,在使用過程中,發現會自動退出登入。所以對指令碼做了一些改動。順便加了一些新的功能。具體如下:
防自動退出
新增刷到票後發起桌面通知
勾選某些型別的車
選擇發站站點
選擇到站站點
選擇乘車時間
最重要的是前2個功能,第一個功能主要是解決因為12306可能對刷票做了特殊處理,自動刷票一段時間後,session會過期。導致後續刷到票後無法自動提交訂單。第二個功能則是方便在刷票時,自動給的桌面提示。畢竟在單位戴耳機工作不太好。其餘功能均為減少人為操作的功能。
桌面提醒功能,需要提前在12306網站上開啟允許桌面提示的功能。具體操作如圖所示:
好了,Talk is cheap, show you the code。
功能指令碼:
//記錄等待時間 var waittime=0; //統計等待時間,防止重新整理間隔時間短時導致卡住不再刷票 function waitforRestart(){ if($(".ad-gt").length>0){ $(".ad-gt").remove(); } if($(".audiojs").length>0){ $(".audiojs").remove(); } 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); } } //防自動退出-1分鐘重新整理一次“個人資訊”頁面,保證登入狀態 function preventLogout(){ setInterval(function(){ if($(".footer").length>0){ $("#footer-my").remove(); var htmlStr="<iframe id='footer-my' width='0' height='0' src='https://kyfw.12306.cn/otn/index/initMy12306?t="+(new Date().getTime())+"'></iframe>"; $(".footer").append(htmlStr); } },1000*30); } //新增桌面通知 function showNotice() { var timer_desktopNotice = setInterval(function(){ if($("#tryPlayer").length>0 && $("#tryPlayer").text=="停止提示音樂"){ Notification.requestPermission(function (perm) { if (perm == "granted") { var notification = new Notification("【恭喜恭喜】", { dir: "auto", lang: "hi", tag: "12306刷票提示", icon: "https://kyfw.12306.cn/otn/resources/images/ots/favicon.ico", body: "恭喜你,終於搶到票了!!!" }); clearInterval(timer_desktopNotice); } }); } },500); } //頁面關閉或者跳轉時,自動提示(當提供提交票時,自動提示) $(window).bind('beforeunload',function(){ Notification.requestPermission(function (perm) { if (perm == "granted") { var notification = new Notification("【恭喜恭喜】", { dir: "auto", lang: "hi", tag: "12306刷票提示", icon: "https://kyfw.12306.cn/otn/resources/images/ots/favicon.ico", body: "恭喜你,終於搶到票了!!!" }); } }); $(window).unbind('beforeunload'); }); //註冊回撥方法 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 addDate(date){ callback($.showSelectDate, function(){ $("#date-list li[name^="+date+"]").click(); $.closeSelectDate(); }); } //自定義查詢區間 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); }); } //勾選某些型別的車 function selectTrainType(types){ $("#_ul_station_train_code input").each(function(i,e){ $(e).prop("checked", false); }); var typelist = types.split("/"); for(var i=0;i<typelist.length;i++){ $("input[value='"+typelist[i]+"']").prop("checked",true); } } //選擇發站站點 function selectFrom(station){ $("#fromStationText").trigger('keydown'); $("#fromStationText").val(station); $("#fromStationText").trigger('keyup'); $("#panel_cities div").each(function(i,s){ var t = $(s).find("span").first(); if(t.text()==station){ $(s).trigger('mouseover').trigger('click'); } }); } //選擇到站站點 function selectTo(station){ $("#toStationText").trigger('keydown'); $("#toStationText").val(station); $("#toStationText").trigger('keyup'); $("#panel_cities div").each(function(i,s){ var t = $(s).find("span").first(); if(t.text()==station){ $(s).trigger('mouseover').trigger('click'); } }); } //選擇發站-到站站點 function selectFromTo(s1,s2){ selectFrom(s1); selectTo(s2); } //選擇乘車時間 function selectDate(date){ $("#train_date").val(date); }
自設定引數指令碼,以以下資訊為例
購票人:張三、李四,
乘車日期:2018-02-13
車次型別:高鐵、動車
起止車站:北京西-石家莊
車次(6個):D2001、G71、G601、G529、G485、G403、G653
座次:二等座
車次區間:07:00-08:10
開啟桌面通知:開啟
刷票頻率:0.5秒
指令碼如下:
//========================================== // 以下則根據需求自行配置: // 乘車人、車次、席別 // 僅顯示要刷的車次、查詢區間、重新整理時間 //========================================== //開啟桌面通知 showNotice(); //選擇北京西-石家莊的車 selectFromTo("北京西","石家莊"); //勾選車次型別:G-高鐵/城際,D-動車,Z-直達,T-特快,K-快速,QT-其他 selectTrainType("G/D"); //選擇乘車日期 selectDate('2018-02-13'); //選擇乘車人 addBuyer("張三"); addBuyer("'李四'"); //手動新增車次,按優先順序新增(輕鬆突破5車次限制) addTrain("D2001"); addTrain("G71"); addTrain("G601"); addTrain("G529"); addTrain("G485"); addTrain("G403"); addTrain("G653"); //新增備選日期 //addDate('2018-01-01'); //新增優先席別,按優先順序新增 addSeat("二等座"); //自定義時間區間 addTimes('07:00','08:10'); //自動重新整理時間0.5s autoSearchTime=500; //收起訂票助手 $(".up").click(); //啟動檢測防掛 var timer = setInterval(waitforRestart,autoSearchTime); //開啟防退出功能 preventLogout(); //開始刷票 if($("#query_ticket").text()=="查詢"){ //僅檢視勾選的車次 $("#filterTic").prop("checked",true); var timer2 = setInterval(function(){ if($("#auto_query").prop("checked") && $("#autoSubmit").prop("checked")&& ($("#filterTic").length==0 || $("#filterTic").prop("checked"))){ console.log("----開始刷票-----at:"+new Date().toLocaleString()); $("#query_ticket").click(); if($("#filterTic").length>0){ $("#filterTic").prop("checked",true); } clearInterval(timer2); } },10); }
整理好自己的指令碼後,將這2段js,貼到一起,然後開啟這個頁面,按步驟操作,即可。
最後恭祝各位早日刷到回家的票~