12306-hunter

12306订票助手
授权协议 GPL
开发语言 Java
所属分类 应用工具、 个人助理软件
软件类型 开源软件
地区 国产
投 递 者 谢清野
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

重要说明:由于12306网站已经全面切换为新版,此版本应用实现已经失效.由于年末较忙暂无更新计划,请另行选择其他最新主流订票助手.

开源Java Swing C/S版本12306订票助手

开源代码:

https://github.com/xautlx/12306-hunter

http://git.oschina.net/xautlx/hunter-12306

本程序完全开放源代码,仅作为技术学习研究交流之用,不得用于任何商业用途;作者不承担任何由此带来的直接或间接责任

  • 特别说明: 整个程序除了速度和效率高一些外,和浏览器订票请求没有本质区别,因此如果12306服务器做了任何调整,程序随时可能失效,请自行酌情使用。
  • 强烈建议: “不要把所有鸡蛋放到一个篮子”,可注册多个账号,一些用于浏览器插件或常规订票,一些用此程序刷票,这样相对更保险。

项目说明

基于HttpClient、Multiple Thread、File I/O等主要技术的Java Swing桌面应用,至于说用途就不多说了,你懂的; 虽然说功能上没有办法和目前类似主流的浏览器插件相提并论,但是由于采用直接的HTTP请求模式,我相信效率上一定会更高。 ** 天下武功,唯快不破 **

  • 直接以HTTP GET/POST发起最小数量必须的订票请求,相比浏览器插件方式更加快速高效;
  • 基于多线程多账号登录并发刷票,更高的订票成功率;
  • 基于文件记录最后输入的订票数据,提高交互友好体验;
  • 该程序只核心关注以最高效快速提交订票请求,不支持诸如自动登录、识别验证码、支付等其他高级功能!

整个程序参考了一个名为mygod-go-home的项目,其中还包括一些自动化识别验证码的尝试,在此对于作者的开源共享表示感谢,但是不知道什么原因目前已经很久没有更新发布了。 原来程序可能是考虑太多太全整个代码结构看起来比较费劲,把其中一些请求参数定义组装和响应解析等体力代码引用过来,然后加入自己的想法设计从而有了这个程序工程。

题外话: 对于这样每到逢年过节炒的火热的订票助手,各大浏览器的插件以及12306之间的恩怨纠葛、道德讨论等我觉得已经够多了,我只能说这就是一个在无聊以及无奈的环境下的产物。 我们还是以技术的角度去看待它,自从有了12306.cn,作为标准程序员闲的没事就有了新的乐趣练练手,既然拥有这样的技术,并且能让技能为我所用,何乐而不为呢。说不定哪天就被XXX封杀潜规则了,谁知道呢,权当娱乐而已!

用法说明

  • 程序下载获取:

简单方式是直接点击页面 (https://github.com/xautlx/12306-hunter) 右下方的“Download ZIP”,以zip压缩文件方式下载整个项目工程,然后解压缩到本地任何目录即可。

当然如果你熟悉GitHub的使用或希望随时update最新代码或修改提交pull request,可通过GitHub支持的git、svn等多种方式check out整个工程代码和执行文件。

程序采用Java语言编写实现,因此需要安装Java运行环境。理论上Java 5,6,7 版本皆可运行。

  • 直接运行程序:

如果系统已安装过Java运行环境,则直接执行startup.bat即可。

当然如果不懂Java也没关系,请自行访问Oracle下载安装Java运行环境:

http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html

选择“Accept License Agreement”,然后点击相应系统版本下载安装即可(可能需要重启系统),之后执行startup.bat即可。

  • 开发模式运行:

本项目本身是一个完整的Eclipse工程,基本Maven依赖管理,熟悉对应开发过程及有兴趣开发调试程序的,可在导入开发工具,以Java应用程序方式执行TicketMainFrame即可。

Swing界面开发采用Eclipse WindowBuilder自动生成框架代码,可自行安装插件以可视化模式查看设计实现。

界面截图

Index View

Submit View

功能说明

如果有任何问题或建议反馈,请到 https://github.com/xautlx/12306-hunter/issues 提交Issue;

对于程序本身的不足或下面提到的优化点,欢迎有兴趣的朋友本着交流学习为目的的代码改进优化并直接提交Pull Request。

参考上述截图,对于UI界面功能从上至下大致说明如下:

目前程序除了基于乘车起始站对车次做基本校验外,其余基本没有更仔细严格的校验,使用时请自行按照官方网站给的有效数据格式填写,也欢迎补充提交完善校验逻辑代码共同完善程序。

TODD:考虑加入配置文件概念,如可以定制化请求间隔时间(目前代码层面固定的0.5秒)等

  • 数据记住功能: 程序在关闭时自动记录最后输入的相关数据免去下次打开程序重复输入,不包括数据:密码、验证码、乘车日期(每次打开始终自动初始化为20天预售期)、 其他动态日志等信息
  • 起站、到站: 请输入精确的乘车站名称,如北京西(TODO:支持中文或拼音输入提示)
  • 乘车日期: 每次打开始终自动初始化为20天预售期,可自行修改为预售期内的有效日期,请保持默认的日期格式(TODO:日历组件输入支持;校验输入日期在预售期内)
  • 备选日期: 主要用于刷“退票”的时候,碰到他人退票自动快速下单,按照顺序优先级填入逗号分隔的乘车“日”字符串,程序自动换算日期属于本月还是下月; 如当前是10号,填写2,1,29,28则表示按照下月2号,1号,本月29号,28号的顺序不断循环尝试订票,直到其中任何一次成功
  • 用户及车次设置: 为了提高成功率,可以添加多个注册的12306账号(点击每个行项前面的加减号),每个登录账号各启动一个线程并发订票,各登录账号可根据所需指定相同订票车次或不同车次组合。

    每个登录账号可从【左至右优先级】设定5个【车次和席别】(一个车次可以以不同席别添加多次) , 程序订票规原则是尽量先定优先级高的票,实在没票了才委屈求全定后续优先级低的票; 简单说就是程序不是按照优先级一个个顺序循环尝试订票,而是始终先不断尝试订优先级高的票,直到系统返回已经没票了才会转入下一车次席别。

    因此请合理设置各账号车次席别顺序和组合方式,因为各登录账号订票线程互相独立运行,各自都随时有可能按照上述的订票原则订到指定优先级的车次和席别的票,设定不合理就会导致优先抢到“不抢手”的票了,再想回头想抢中意的票估计就来不及了。 当然也不用考虑太复杂,每个登录账号和车次席别自动发现有票时,会自动弹出下单验证码输入对话框,如果感觉不是自己中意的票可以点击取消即可从而自动再继续尝试刷票,避免不必要的误伤了。

  • 账号、密码、验证码: 没什么好说的,顺序输入即可,验证码会自动转为大写并且在满4位后自动触发点击登录请求;只有登录成功的用户行项才会启动刷票线程。验证码图片看不清可以点击刷新。下方是每个登录用户的Cookie数据,显示参考不用太关注。 (TODO:考虑加一个登录状态的守护线程,防止由于登录后长时间没有发起请求导致登录失效)
  • 车次、席别: 一个登录账号可以分别输入多个车次(包括字面前缀的完整车次)及对应席别,从左到右优先级,规则见上述说明 ;具体车次代码和有效的席别请自行通过12306网站查询。(TODO:可考虑加入车次对应席别有效性的校验)
  • 乘车人: 没啥好说的,按照网站类似的填写相关信息即可,可点击加减号增减多个乘车人,左侧有个勾选用以确定本次订票乘车人(用于方便保存维护多个乘车人供以后使用,但是只勾选本次必要的乘车人),建议从12036常用联系人拷贝相关数据,避免手工输入错误(TODO:添加从12306获取乘车人信息及有效性校验)
  • 开始自动刷票: 基于“已成功登录的账号”和“已勾选的乘车人”,及相关填写信息启动刷票线程,期间刷到票后后自动弹出顶层窗口显示相关车次信息和输入验证码,确认是需要的票的赶快输入验证码(输入4位自动提交)提交下单,如果验证码错误会再次弹出窗口输入;如果不是想要的车票则点击取消即可。 任何一个账号线程提示订票成功后会当前线程自动终止,但是其他账号线程还会继续,可以点击“停止自动刷票”结束所有刷票线程。
  • 停止自动刷票: 强制结束所有刷票线程。

友情推荐

  • S2JH - 作者项目:基于SSH的企业Web应用开发框架
  • Nutch Htmlunit Plugin - 作者项目:基于Htmlunit扩展的Nutch支持AJAX页面抓取插件
  • 这是一个12306抢票软件,代码已经上传到github,截至目前为止可以完成自动下单功能(下单时候没有验证码的车次)。目前没有那么大的精力和时间去生产和建立一个属于自己的验证码识别库,我会在后面去写一个如何通过机器学习生产一个自动识别物体的文章(TensorFlow物体识别——通过机器学习搭建属于自己的物体识别库)。 严重声明:此次代码仅用于交流和学习,严禁非法干扰、破坏社会秩序。 相关信息:  

  • 爬虫实战:破解点触验证码,实现12306登录 1.目标 实现12306登录,获取登录cookies 2.技术点 1.借用第三方打码平台,进行图片验证码识别 2.破解selenium webdriver反爬 3.思路 1.输入账号密码 2.获取验证图片 3.识别图片,获取坐标 4.图片验证 5.登录 6.滑动滑块 4.环境 python + selenium + 超级鹰 5.代码 1.12306登录

  • Description  过年了,要买票了,12306又挂了。不过幸好网上一大堆抢票软件,木鱼.net版提前输入验证码,抢票容易多了。 假设我们班很多同学都用抢票软件,一上去后就抢到了票。你能知道火车站网站收到钱的顺序吗? Input  多组测试数据,先输入一个整数T,表示组数,然后再输入t组测试数据,每组数据先输入1个整数k代表k个同学去用抢票软件买了车票,随后是k行,每行输入2个整数n和m,代

  • 12306网站接口 准备开始做余票查询功能 余票火车信息查询 查询URL格式: 12306.php10086.com/yupiao.PHP?act=remain&arriveStation=上海&date=2012-02-02&startStation=杭州 参数格式: act,是查询类型,remain表示为余票查询类型 date:  [yyyy-mm-dd格式]  startStation: 

  • ''' 1、需要登录页面,手动输入账号密码! 2、地查询车次,输入 起点、目的、出发时间,找到车次,就进行选择 3、选择完成后,就查询该车次是否有余票(进行显示)如果有就进行购买,没有就进行循环 4、如果有就进入购买界面,找到 或者 输入 乘车人信息 ,提交 5、点击提交按钮,付款完成抢票 https://kyfw.12306.cn/otn/leftTicket/init?linktype

 相关资料
  • 这是一个用于辅助在12306.CN上订票的Chrome&Firefox脚本。 这是一个可以运行在**遨游3**、**Chrome**、**猎豹**或**Firefox**浏览器上的脚本扩展,可以帮助您在 12306.CN 购买火车票(或抢火车票?),反正就是偷懒呗。 目前已经实现的功能包括: 记录登录的用户名和密码,在打开登录页面后自动填写; 自动登录,遇到人过多或繁忙的时候自动重试,直到登录成功

  • 12306抢票软件 是基于JAVA开发 为广大人提供回家的机会.

  • 本文向大家介绍12306 刷票脚本及稳固刷票脚本(防挂),包括了12306 刷票脚本及稳固刷票脚本(防挂)的使用技巧和注意事项,需要的朋友参考一下 12306 刷票脚本及防挂        一年一度的“抢票运动会”又开始了,期间12306网站承受的压力越来越大,极不稳定。随着人们对互联网越来越熟悉,导致大量刷票软件的用户量猛增,大量的访问将12306快压垮了,以至于使用12306自家的刷票助手经常

  • 用nodewebkit封装的一个伪客户端版定火车票工具

  • 本文向大家介绍python实现12306火车票查询器,包括了python实现12306火车票查询器的使用技巧和注意事项,需要的朋友参考一下 12306火车票购票软件大家都用过,怎么用Python写一个命令行的火车票查看器,要求在命令行敲一行命令来获得你想要的火车票信息,下面通过本文学习吧。 Python火车票查询器 接口设置 先给这个小应用起个名字吧,既然及查询票务信息,那就叫它tickets 我

  • 1.我们的产品都包含税,为什么下单没显示发票选项? 当前系统默认税率为0,就不显示发票选项。如果要设置税率,可在【后台-设置-交易设置-发票设置】设置发票相关内容。

  • 本文向大家介绍python自动12306抢票软件实现代码,包括了python自动12306抢票软件实现代码的使用技巧和注意事项,需要的朋友参考一下 昨天我发的是抓取的12306数据包,然后分析了一下,今天按照昨天的分析 用代码实现了,如果有需要的同学们可以看一下,实现的功能有,登录,验证码识别,自动查票,有余票点击预定, 差了最后一步提交订单。同学们可以自己研究一下。 以上就是本文的全部内容,希望

  • Qzone订阅助手是一个为QQ和RSS阅读器同时的使用者准备的小工具。它从QQ产生的好友名单来收集好友的 Qzone信息,然后生成用来在RSS阅读器里批量订阅的XML文件。通过导入该文件,用户就可以实现不登入QQ而第一时间在阅读器获得Q友的最新日志。