Skip to content

Instantly share code, notes, and snippets.

@flyfire
Forked from oklai/README.md
Created November 13, 2013 04:37
Show Gist options
  • Save flyfire/7443779 to your computer and use it in GitHub Desktop.
Save flyfire/7443779 to your computer and use it in GitHub Desktop.

TCTicketScript

TCTicketScript是一段浏览器脚本,帮你自动查询火车票余票。

如何使用

  1. 进入https://dynamic.12306.cn/otsweb/,注意必须从这个地址进入,忽略警告信息;
  2. 在页面设定好你的出发地、目的地与出发日期;
  3. 复制TCTicketScript.js中的代码;
  4. 打开浏览器调试工具控制台(F12),执行此代码。第一次会询问是否开启桌面提示功能,需同意。
  5. Done! 最小化浏览器,专心上班吧,有余票时屏幕右下角将会出现提示。

说明:请在Firefox最新版中使用此脚本,桌面提示功能其他浏览器可能不支持,包括Chrome(权限原因)。请使用Firefox国际版,中国版会把订票页面切换成IE内核。

高级功能

查询指定的车次

修改代码头部变量trainCodes

var trainCodes = ['K446', 'T212'];

轮番查询多个日期

修改代码头部变量startDays,格式: 2013-09-30。

var startDays = ['2013-09-29', '2013-09-30']; // 轮番查询不同日期,

截图

有票提示

(function($) {
var trainCodes = []; // 指定车次,注意字母一般大写
var startDays = []; // 轮番查询不同日期,格式 2013-09-30
var frame = document.getElementById('main').contentWindow.document,
startdatepicker = $('#startdatepicker', frame),
searchBtn = $('#submitQuery', frame);
var lockDate; // 当有票时锁定日期
// 触发查询动作
function autoSearch () {
if (searchBtn[0].className.indexOf('search_u') !== -1) {
// 轮番查询
var day = toggleDate();
if (day) {
startdatepicker.val(day);
}
searchBtn.click();
}
}
// 查找余票
function searchTicket () {
var tableRows = $('.row20px', frame).find('tr');
var ret = [];
tableRows.each(function () {
var _this = this,
cols = $('td', _this),
// 获取硬座余票数量
num = cols.eq(12).text(),
// 获取当前车次
code = cols.eq(0).text();
if (checkCode(code) && (num === '有' || parseInt(num, 10) > 0)) {
ret.push({
code: code,
num: num,
day: startdatepicker.val()
});
}
});
if (ret.length) {
createNotification(ret);
lockDate = true;
} else {
lockDate = false;
}
}
// 匹配指定车次
function checkCode (code) {
if (!trainCodes.length) return true;
if (trainCodes.length && trainCodes.indexOf(code) > -1) return true;
return false;
}
// 切换查询日期
var dayIndex = 0;
function toggleDate () {
if (!startDays.length || lockDate) return false; // 不轮询查询
if (dayIndex === startDays.length) dayIndex = 0;
var day = startDays[dayIndex];
dayIndex ++;
return day;
}
// 打开桌面提示
Notification.requestPermission();
// 弹出提示信息
function createNotification (ret) {
var msg = '';
ret.forEach(function (item) {
msg += item.day + ' 车次 ' + item.code + '有余票 ' + item.num + '张!!!\n';
});
var data = {
dir: "auto",
body: msg,
icon: "http://ww3.sinaimg.cn/mw690/6fb2c1e4gw1e8jp394fabj203k03kgli.jpg"
};
new Notification('赶紧抢票!!!!!', data);
}
// 开始执行
setInterval(autoSearch, 3000);
setInterval(searchTicket, 3000);
$('.wc_titlewb', frame).append('<p style="font-size:20px;color:red;font-weight:bold;">程序正在为你自动查询中...</p>');
console.log('OK,程序已开始执行,有票时屏幕右下角将会出现提示,不用盯着看啦。');
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment