12306 刷票脚本及稳固刷票脚本(防挂)


Posted in Javascript onJanuary 04, 2017

12306 刷票脚本及防挂

       一年一度的“抢票运动会”又开始了,期间12306网站承受的压力越来越大,极不稳定。随着人们对互联网越来越熟悉,导致大量刷票软件的用户量猛增,大量的访问将12306快压垮了,以至于使用12306自家的刷票助手经常崩溃而无法继续刷票。作为一名“资深”的程序员,我无法忍受了,所以果断出手,写了一段js来防挂。

       本来想简单的解决一下刷票自动挂的问题,后来想想写都写了,不如再增加几个有用的功能。

       现在脚本的功能有:

  1. 防止自动刷票崩溃(挂掉后自动重新刷票)
  2. 自定义查询时间区间
  3. 自定义自动刷新时间间隔
  4. 突破5车次限制
  5. 可根据时间段、车类型刷所有满足的车次

       废话不多说,直接上代码吧:

//记录等待时间 
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. 根据车次进行刷票

       具体操作:

  1. 打开12306网站
  2. 选定好车次方向和发车日期
  3. 筛选出要刷新的车次、乘车人、席做等,替换下面的内容
//========================================== 
// 以下则根据需求自行配置: 
//   乘车人、车次、席别 
//   仅显示要刷的车次、查询区间、刷新时间 
//========================================== 
 
//选择乘车人 
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秒后重新开始自动刷票。

12306 刷票脚本及稳固刷票脚本(防挂)

       2. 刷新某时间段内的特定车次类型的票,如刷新09:30-12:15之间所有高铁+动车票

       具体操作:

  • 打开12306
  • 选好车次方向和发车日期
  • 确定时间段、车次类型、席坐,然后替换下面的内容
//========================================== 
// 以下则根据需求自行配置: 
//   乘车人、车次、席别 
//   仅显示要刷的车次、查询区间、刷新时间 
//========================================== 
 
//选择乘车人 
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,然后点击一下标签即可自动刷票了。

12306 刷票脚本及稳固刷票脚本(防挂)

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript instanceof,typeof的区别
Mar 24 Javascript
用jquery实现点击栏目背景色改变
Dec 10 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
jquery.form.js用法之清空form的方法
Mar 07 Javascript
jQuery浏览器CSS3特写兼容实例
Jan 19 Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 Javascript
基于vue的下拉刷新指令和滚动刷新指令
Dec 23 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
Aug 17 Javascript
深入理解node.js http模块
Jan 24 Javascript
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 jQuery
深入理解JavaScript中的预解析
Jan 04 #Javascript
jQuery操作json常用方法示例
Jan 04 #Javascript
Bootstrap select下拉联动(jQuery cxselect)
Jan 04 #Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 #Javascript
过期软件破解办法实例详解
Jan 04 #Javascript
jQuery.Validate表单验证插件的使用示例详解
Jan 04 #Javascript
javascript实现一个网页加载进度loading
Jan 04 #Javascript
You might like
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
python读取LMDB中图像的方法
2018/07/02 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
法学专业应届生求职信
2013/10/16 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
监护人证明
2015/06/19 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
Python实现列表拼接和去重的三种方式
2021/07/02 Python
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
JS实现简单的九宫格抽奖
2022/06/28 Javascript