12306 刷票腳本及穩(wěn)固刷票腳本(防掛)
12306 刷票腳本及防掛
一年一度的“搶票運(yùn)動(dòng)會(huì)”又開始了,期間12306網(wǎng)站承受的壓力越來(lái)越大,極不穩(wěn)定。隨著人們對(duì)互聯(lián)網(wǎng)越來(lái)越熟悉,導(dǎo)致大量刷票軟件的用戶量猛增,大量的訪問將12306快壓垮了,以至于使用12306自家的刷票助手經(jīng)常崩潰而無(wú)法繼續(xù)刷票。作為一名“資深”的程序員,我無(wú)法忍受了,所以果斷出手,寫了一段js來(lái)防掛。
本來(lái)想簡(jiǎn)單的解決一下刷票自動(dòng)掛的問題,后來(lái)想想寫都寫了,不如再增加幾個(gè)有用的功能。
現(xiàn)在腳本的功能有:
- 防止自動(dòng)刷票崩潰(掛掉后自動(dòng)重新刷票)
- 自定義查詢時(shí)間區(qū)間
- 自定義自動(dòng)刷新時(shí)間間隔
- 突破5車次限制
- 可根據(jù)時(shí)間段、車類型刷所有滿足的車次
廢話不多說(shuō),直接上代碼吧:
//記錄等待時(shí)間
var waittime=0;
//統(tǒng)計(jì)等待時(shí)間
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);
}
}
//注冊(cè)回調(diào)方法
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>');
}
//添加優(yōu)先席別
function addSeat(seat){
callback($.showSelectSeat, function(){
$("#seat-list li[name^="+seat+"]").click();
$.closeSelectSeat();
});
}
//自定義查詢區(qū)間
function addTimes(startTime,endTime){
$("#cc_start_time").append('<option value="'+startTime.replace(":","")+endTime.replace(":","")+'">'+startTime+'--'+endTime+'</option>');
$("#cc_start_time option:last").selected();
}
//根據(jù)時(shí)間段、車次類型查詢所有滿足的車次。
function queryByTimeAndTrainType(){
callback($.showYxTrain, function(){
var yxTrainTimer = setInterval(function(){
if($("#filterTic").length>0){
$("#filterTic").prop("checked",true);
$("#yxtrain_close").click();
clearInterval(yxTrainTimer);
}
},10);
});
}
以上是提供了修改配置的方法,以下則根據(jù)需求自行配置,我們可以選定車次進(jìn)行刷票,也可以根據(jù)時(shí)間段+車次類型刷該時(shí)間段內(nèi)的某類車次。分開來(lái)說(shuō):
1. 根據(jù)車次進(jìn)行刷票
具體操作:
- 打開12306網(wǎng)站
- 選定好車次方向和發(fā)車日期
- 篩選出要刷新的車次、乘車人、席做等,替換下面的內(nèi)容
//==========================================
// 以下則根據(jù)需求自行配置:
// 乘車人、車次、席別
// 僅顯示要刷的車次、查詢區(qū)間、刷新時(shí)間
//==========================================
//選擇乘車人
addBuyer("張三");
addBuyer("'李四(成人)'");
addBuyer("'王五(學(xué)生)'");
//手動(dòng)添加車次,按優(yōu)先順序添加(輕松突破5車次限制)
addTrain("G100");
addTrain("G101");
addTrain("G102");
addTrain("G103");
addTrain("G104");
addTrain("G105");
addTrain("G106");
addTrain("G107");
//添加優(yōu)先席別,按優(yōu)先順序添加
addSeat("二等座");
addSeat("一等座");
//自動(dòng)刷新時(shí)間1s
autoSearchTime=1000;
//收起訂票助手
$(".up").click();
//啟動(dòng)檢測(cè)防掛
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);
}
將以上修改好的內(nèi)容貼到瀏覽器控制臺(tái)上(F12或者Ctrl+Shift+J)按回車執(zhí)行。就可以自動(dòng)開始刷票了。如果刷新請(qǐng)求timeout了,會(huì)由waittime記錄超時(shí)等待時(shí)間,>10時(shí)則會(huì)自動(dòng)取消刷新,1秒后重新開始自動(dòng)刷票。

2. 刷新某時(shí)間段內(nèi)的特定車次類型的票,如刷新09:30-12:15之間所有高鐵+動(dòng)車票
具體操作:
- 打開12306
- 選好車次方向和發(fā)車日期
- 確定時(shí)間段、車次類型、席坐,然后替換下面的內(nèi)容
//==========================================
// 以下則根據(jù)需求自行配置:
// 乘車人、車次、席別
// 僅顯示要刷的車次、查詢區(qū)間、刷新時(shí)間
//==========================================
//選擇乘車人
addBuyer("張三");
addBuyer("'李四(成人)'");
addBuyer("'王五(學(xué)生)'");
//添加優(yōu)先席別,按優(yōu)先順序添加
addSeat("二等座");
//手動(dòng)設(shè)置查詢區(qū)間
addTimes("09:30","12:15");
//僅顯示高鐵+動(dòng)車
$(".check[value='G']").prop("checked",true);
$(".check[value='D']").prop("checked",true);
//僅顯示時(shí)間段內(nèi)的車次、僅顯示有票的車次,二選一
//注意,如果選擇了該項(xiàng),則勾選的車次則無(wú)效了。
queryByTimeAndTrainType();
//自動(dòng)刷新時(shí)間1s
autoSearchTime=1000;
//收起訂票助手
$(".up").click();
//啟動(dòng)檢測(cè)防掛
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);
}
同樣粘貼在瀏覽器控制臺(tái)按回車執(zhí)行即可。
是不是很簡(jiǎn)單?有人會(huì)說(shuō)簡(jiǎn)單但是繁瑣。的確步驟有點(diǎn)多,那我就再提供已方法讓步驟簡(jiǎn)化一下即可。那就是把上面修改過的內(nèi)容,去掉注釋行(就是//開頭的行)然后把所有的換行都去掉,把所有內(nèi)容縮到一行上。然后在前面加上javascript:,最后把它存放到書簽上,使用的時(shí)候,打開12306,然后點(diǎn)擊一下標(biāo)簽即可自動(dòng)刷票了。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
JavaScript使用canvas繪制隨機(jī)驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了JavaScript使用canvas繪制隨機(jī)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
JS實(shí)現(xiàn)滑動(dòng)菜單效果代碼(包括Tab,選項(xiàng)卡,橫向等效果)
這篇文章主要介紹了JS實(shí)現(xiàn)滑動(dòng)菜單效果代碼,以實(shí)例形式實(shí)現(xiàn)了包括Tab,選項(xiàng)卡,橫向等效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-09-09
checkbox設(shè)置復(fù)選框的只讀效果不讓用戶勾選
有時(shí)候是只想告知用戶這個(gè)地方是可以進(jìn)行勾選操作的而不想讓用戶在此處勾選(比如在信息展示頁(yè)面),這時(shí)候就需要將復(fù)選框設(shè)置成只讀的效果,具體實(shí)現(xiàn)方法如下2013-08-08
詳解js實(shí)時(shí)獲取并顯示當(dāng)前時(shí)間的方法
這篇文章主要介紹了js實(shí)時(shí)獲取并顯示當(dāng)前時(shí)間的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
JS實(shí)現(xiàn)元素的拖動(dòng)與占位功能
這篇文章主要介紹了JS實(shí)現(xiàn)元素的拖動(dòng)與占位功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
JavaScript如何實(shí)現(xiàn)組合列表框中元素移動(dòng)效果
在頁(yè)面中有兩個(gè)列表框,需要把其中一個(gè)列表框的元素移動(dòng)到另一個(gè)列表框,怎么實(shí)現(xiàn)此功能呢,下面通過本文給大家介紹JavaScript如何實(shí)現(xiàn)組合列表框中元素移動(dòng)效果,感興趣的朋友一起學(xué)習(xí)吧2016-03-03

