1. 程式人生 > >12306刷票指令碼

12306刷票指令碼

我也在刷票,不過發現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,貼到一起,然後開啟這個頁面,按步驟操作,即可。

最後恭祝各位早日刷到回家的票~