/** * author: jxq */ var stationDict = { "广州" : "GZQ", "吉安" : "VAG", "北京" : "BJP", "北京西" : "BXP", "太原" : "TYV", "深圳" : "SZQ", "上海" : "SHH" }; var queryUrlTemplate = "https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=queryLeftTicket&orderRequest.train_date={trainDate}&orderRequest.from_station_telecode={fromStationCode}&orderRequest.to_station_telecode={toStationCode}&orderRequest.train_no=&trainPassType=QB&trainClass=QB%23D%23Z%23T%23K%23QT%23&includeStudent=00&seatTypeAndNum=&orderRequest.start_time_str=00%3A00--24%3A00"; function queryTickets(fromStation, toStation, trainDate) { var fromStationCode = stationDict[fromStation]; var toStationCode = stationDict[toStation]; var queryUrl = queryUrlTemplate.replace("{trainDate}", trainDate).replace("{fromStationCode}", fromStationCode).replace("{toStationCode}", toStationCode); // 查询余票 $.get(queryUrl, function (data) { // 简单地检查是否有票,如果有票,则data中一定包含文本 btn130_2 if (data.indexOf("btn130_2") != -1) { // 有票 sendDesktopNotification("有票了亲!", fromStation + " - " + toStation + "有票了!\n快来抢票哈~~"); clearInterval(myInterval); // 清除轮询,以免烦人 } else { console.log("不好意思," + fromStation + "-" + toStation + "暂时无票!"); } } ); } // 桌面通知 function sendDesktopNotification(title, msg) { if (!window.webkitNotifications || (window.webkitNotifications.checkPermission() != 0)) { // 不支持桌面通知或未授权 alert("不好意思,你的浏览器不支持桌面通知或者你未开启!"); return; // 不支持桌面通知 } var notificationMsgBox = window.webkitNotifications.createNotification(icon = "http://www.12306.cn/mormhweb/images/favicon.ico", title, msg); notificationMsgBox.show(); } queryTickets("北京", "广州", "2013-02-07"); // 每5秒刷一次票 var myInterval = setInterval(function () { queryTickets("北京", "广州", "2013-02-07"); }, 5000); /* 使用方法如下: 1、修改你的出发地、目的地以及出发时间信息,并且配置对应的城市代码(这个自己抓包看,很简单,Chrome network面板或者Fiddler) 2、登录并打开订票窗口 3、在控制台输入这段脚本代码 4、等待好了,每5秒刷一次,没票会在控制台输出信息,有票会弹出桌面通知,具体参考截图 缺陷 A、不支持筛选硬座、硬卧等信息,但是要支持很简单,看我的代码就知道了 B、不支持自动提交订单 C、只能帮你检查是否有票,有票了还需要你自己去点下查询按钮,然后订票(主要是因为这个按钮在iframe内部,不方便直接操纵) D、你的Chrome浏览器可能会遇到 分享自:http://www.oschina.net/code/snippet_111708_17517 */