12306.cn买票,难死了,登录登录登录。。。

现在不用了。。。

js插件+chrome浏览器:

/*
* 12306 Auto Query => A javascript snippet to help you book tickets online.
* 12306 Booking Assistant
* Copyright (C) 2011 Hidden
*
* 12306 Auto Query => A javascript snippet to help you book tickets online.
* Copyright (C) 2011 Jingqin Lynn
*
* 12306 Auto Login => A javascript snippet to help you auto login 12306.com.
* Copyright (C) 2011 Kevintop
*
* Includes jQuery
* Copyright 2011, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/ // ==UserScript==
// @name 12306 Booking Assistant
// @version 1.3.10
// @author zzdhidden@gmail.com
// @namespace https://github.com/zzdhidden
// @description 12306 订票助手之(自动登录,自动查票,自动订单)
// @include *://dynamic.12306.cn/otsweb/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// ==/UserScript== function withjQuery(callback, safe){
if(typeof(jQuery) == "undefined") {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"; if(safe) {
var cb = document.createElement("script");
cb.type = "text/javascript";
cb.textContent = "jQuery.noConflict();(" + callback.toString() + ")(jQuery, window);";
script.addEventListener('load', function() {
document.head.appendChild(cb);
});
}
else {
var dollar = undefined;
if(typeof($) != "undefined") dollar = $;
script.addEventListener('load', function() {
jQuery.noConflict();
$ = dollar;
callback(jQuery, window);
});
}
document.head.appendChild(script);
} else {
setTimeout(function() {
//Firefox supports
callback(jQuery, typeof unsafeWindow === "undefined" ? window : unsafeWindow);
}, 30);
}
} withjQuery(function($, window){
$(document).click(function() {
if( window.webkitNotifications && window.webkitNotifications.checkPermission() != 0 ) {
window.webkitNotifications.requestPermission();
}
});
function notify(str, timeout, skipAlert) {
if( window.webkitNotifications && window.webkitNotifications.checkPermission() == 0 ) {
var notification = webkitNotifications.createNotification(
"http://www.12306.cn/mormhweb/images/favicon.ico", // icon url - can be relative
'订票', // notification title
str
);
notification.show();
if ( timeout ) {
setTimeout(function() {
notification.cancel();
}, timeout);
}
return true;
} else {
if( !skipAlert ) {
alert( str );
}
return false;
}
}
function route(match, fn) {
if( window.location.href.indexOf(match) != -1 ) {
fn();
};
} function query() { //query
var isTicketAvailable = false; var firstRemove = false; window.$ && window.$(".obj:first").ajaxComplete(function() {
$(this).find("tr").each(function(n, e) {
if(checkTickets(e)){
isTicketAvailable = true;
highLightRow(e);
}
});
if(firstRemove) {
firstRemove = false;
if (isTicketAvailable) {
if (isAutoQueryEnabled)
document.getElementById("refreshButton").click();
onticketAvailable(); //report
}
else {
//wait for the button to become valid
}
}
}).ajaxError(function() {
if(isAutoQueryEnabled) doQuery();
}); //hack into the validQueryButton function to detect query
var _delayButton = window.delayButton; window.delayButton = function() {
_delayButton();
if(isAutoQueryEnabled) doQuery();
} //Trigger the button
var doQuery = function() {
displayQueryTimes(queryTimes++);
firstRemove = true;
document.getElementById(isStudentTicket ? "stu_submitQuery" : "submitQuery").click();
} var $special = $("<input type='text' />")
var checkTickets = function(row) {
var hasTicket = false;
var v1 = $special.val();
if( v1 ) {
var v2 = $.trim( $(row).find(".base_txtdiv").text() );
if( v1.indexOf( v2 ) == -1 ) {
return false;
}
} if( $(row).find("td input.yuding_x[type=button]").length ) {
return false;
} $("td", row).each(function(i, e) {
if(ticketType[i-1]) {
var info = $.trim($(e).text());
if(info != "--" && info != "无") {
hasTicket = true;
highLightCell(e);
}
}
}); return hasTicket;
} var queryTimes = 0; //counter
var isAutoQueryEnabled = false; //enable flag //please DIY:
var audio = null; var onticketAvailable = function() {
if(window.Audio) {
if(!audio) {
audio = new Audio("http://www.w3school.com.cn/i/song.ogg");
audio.loop = true;
}
audio.play();
notify("可以订票了!", null, true);
} else {
notify("可以订票了!");
}
}
var highLightRow = function(row) {
$(row).css("background-color", "#D1E1F1");
}
var highLightCell = function(cell) {
$(cell).css("background-color", "#2CC03E");
}
var displayQueryTimes = function(n) {
document.getElementById("refreshTimes").innerHTML = n;
}; var isStudentTicket = false; //Control panel UI
var ui = $("<div>请先选择好出发地,目的地,和出发时间。&nbsp;&nbsp;&nbsp;</div>")
.append(
$("<input id='isStudentTicket' type='checkbox' />").change(function(){
isStudentTicket = this.checked;
})
)
.append(
$("<label for='isStudentTicket'></label>").html("学生票&nbsp;&nbsp;")
)
.append(
$("<button style='padding: 5px 10px; background: #2CC03E;border-color: #259A33;border-right-color: #2CC03E;border-bottom-color:#2CC03E;color: white;border-radius: 5px;text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.2);'/>").attr("id", "refreshButton").html("开始刷票").click(function() {
if(!isAutoQueryEnabled) {
isTicketAvailable = false;
if(audio && !audio.paused) audio.pause();
isAutoQueryEnabled = true;
doQuery();
this.innerHTML="停止刷票";
}
else {
isAutoQueryEnabled = false;
this.innerHTML="开始刷票";
}
})
)
.append(
$("<span>").html("&nbsp;&nbsp;尝试次数:").append(
$("<span/>").attr("id", "refreshTimes").text("0")
)
)
.append(
//Custom ticket type
$("<div>如果只需要刷特定的票种,请在余票信息下面勾选。</div>")
.append($("<a href='#' style='color: blue;'>只勾选坐票&nbsp;&nbsp;</a>").click(function() {
$(".hdr tr:eq(2) td").each(function(i,e) {
var val = this.innerHTML.indexOf("座") != -1;
var el = $(this).find("input").attr("checked", val);
el && el[0] && ( ticketType[el[0].ticketTypeId] = val );
});
return false;
}))
.append($("<a href='#' style='color: blue;'>只勾选卧铺&nbsp;&nbsp;</a>").click(function() {
$(".hdr tr:eq(2) td").each(function(i,e) {
var val = this.innerHTML.indexOf("卧") != -1;
var el = $(this).find("input").attr("checked", val);
el && el[0] && ( ticketType[el[0].ticketTypeId] = val );
});
return false;
}))
)
.append(
$("<div>限定出发车次:</div>")
.append( $special )
.append( "不限制不填写,限定多次用逗号分割,例如: G32,G34" )
);
var container = $(".cx_title_w:first");
container.length ?
ui.insertBefore(container) : ui.appendTo(document.body); //Ticket type selector & UI
var ticketType = new Array();
$(".hdr tr:eq(2) td").each(function(i,e) {
ticketType.push(false);
if(i<3) return;
ticketType[i] = true; var c = $("<input/>").attr("type", "checkBox").attr("checked", true);
c[0].ticketTypeId = i;
c.change(function() {
ticketType[this.ticketTypeId] = this.checked;
}).appendTo(e);
});
} route("querySingleAction.do", query);
route("myOrderAction.do?method=resign", query);
route("confirmPassengerResignAction.do?method=cancelOrderToQuery", query); route("loginAction.do?method=init", function() {
if( !window.location.href.match( /init$/i ) ) {
return;
}
//login
var url = "https://dynamic.12306.cn/otsweb/loginAction.do?method=login";
var queryurl = "https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=init";
//Check had login, redirect to query url
if( window.parent && window.parent.$ ) {
var str = window.parent.$("#username_ a").attr("href");
if( str && str.indexOf("sysuser/user_info") != -1 ){
window.location.href = queryurl;
return;
}
} function submitForm(){
var submitUrl = url;
$.ajax({
type: "POST",
url: submitUrl,
data: {
"loginUser.user_name": $("#UserName").val()
, "user.password": $("#password").val()
, "randCode": $("#randCode").val()
},
beforeSend: function( xhr ) {
try{
xhr.setRequestHeader('X-Requested-With', {toString: function(){ return ''; }});
xhr.setRequestHeader('Cache-Control', 'max-age=0');
xhr.setRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
}catch(e){};
},
timeout: 30000,
//cache: false,
//async: false,
success: function(msg){
//密码输入错误
//您的用户已经被锁定
if ( msg.indexOf('请输入正确的验证码') > -1 ) {
alert('请输入正确的验证码!');
} else if ( msg.indexOf('当前访问用户过多') > -1 ){
reLogin();
} else if( msg.match(/var\s+isLogin\s*=\s*true/i) ) {
notify('登录成功,开始查询车票吧!');
window.location.replace( queryurl );
} else {
msg = msg.match(/var\s+message\s*=\s*"([^"]*)/);
if( msg && msg[1] ) {
alert( msg && msg[1] );
} else {
reLogin();
}
}
},
error: function(msg){
reLogin();
}
});
} var count = 1;
function reLogin(){
count ++;
$('#refreshButton').html("("+count+")次登录中...");
setTimeout(submitForm, 2000);
}
//初始化
$("#subLink").after($("<a href='#' style='padding: 5px 10px; background: #2CC03E;border-color: #259A33;border-right-color: #2CC03E;border-bottom-color:#2CC03E;color: white;border-radius: 5px;text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.2);'/>").attr("id", "refreshButton").html("自动登录").click(function() {
count = 1;
$(this).html("(1)次登录中...");
//notify('开始尝试登录,请耐心等待!', 4000);
submitForm();
return false;
})); alert('如果使用自动登录功能,请输入用户名、密码及验证码后,点击自动登录,系统会尝试登录,直至成功!');
});
route("confirmPassengerAction.do", submit);
route("confirmPassengerResignAction.do", submit);
function submit() {
/**
* Auto Submit Order
* From: https://gist.github.com/1577671
* Author: kevintop@gmail.com
*/
//Auto select the first user when not selected
if( !$("input._checkbox_class:checked").length ) {
try{
//Will failed in IE
$("input._checkbox_class:first").click();
}catch(e){};
}
//passengerTickets var userInfoUrl = 'https://dynamic.12306.cn/otsweb/order/myOrderAction.do?method=queryMyOrderNotComplete&leftmenu=Y'; var count = 1, freq = 1000, doing = false, timer, $msg = $("<div style='padding-left:470px;'></div>"); function submitForm(){
timer = null;
//更改提交列车日期参数
//var wantDate = $("#startdatepicker").val();
//$("#start_date").val(wantDate);
//$("#_train_date_str").val(wantDate); jQuery.ajax({
url: $("#confirmPassenger").attr('action'),
data: $('#confirmPassenger').serialize(),
beforeSend: function( xhr ) {
try{
xhr.setRequestHeader('X-Requested-With', {toString: function(){ return ''; }});
xhr.setRequestHeader('Cache-Control', 'max-age=0');
xhr.setRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
}catch(e){};
},
type: "POST",
timeout: 30000,
success: function( msg )
{
//Refresh token
var match = msg && msg.match(/org\.apache\.struts\.taglib\.html\.TOKEN['"]?\s*value=['"]?([^'">]+)/i);
var newToken = match && match[1];
if(newToken) {
$("input[name='org.apache.struts.taglib.html.TOKEN']").val(newToken);
} if( msg.indexOf('payButton') > -1 ) {
//Success!
var audio;
if( window.Audio ) {
audio = new Audio("http://www.w3school.com.cn/i/song.ogg");
audio.loop = true;
audio.play();
}
notify("恭喜,车票预订成!", null, true);
setTimeout(function() {
if( confirm("车票预订成,去付款?") ){
window.location.replace(userInfoUrl);
} else {
if(audio && !audio.paused) audio.pause();
}
}, 100);
return;
}else if(msg.indexOf('未处理的订单') > -1){
notify("有未处理的订单!");
window.location.replace(userInfoUrl);
return;
}
var reTryMessage = [
'用户过多'
, '确认客票的状态后再尝试后续操作'
, '请不要重复提交'
, '没有足够的票!'
, '车次不开行'
];
for (var i = reTryMessage.length - 1; i >= 0; i--) {
if( msg.indexOf( reTryMessage[i] ) > -1 ) {
reSubmitForm( reTryMessage[i] );
return;
}
};
//Parse error message
msg = msg.match(/var\s+message\s*=\s*"([^"]*)/);
stop(msg && msg[1] || '出错了。。。。 啥错? 我也不知道。。。。。');
},
error: function(msg){
reSubmitForm("网络错误");
}
});
};
function reSubmitForm(msg){
if( !doing )return;
count ++;
$msg.html("("+count+")次自动提交中... " + (msg || ""));
timer = setTimeout( submitForm, freq || 50 );
}
function stop ( msg ) {
doing = false;
$msg.html("("+count+")次 已停止");
$('#refreshButton').html("自动提交订单");
timer && clearTimeout( timer );
msg && alert( msg );
}
function reloadSeat(){
$("select[name$='_seat']").html('<option value="M" selected="">一等座</option><option value="O" selected="">二等座</option><option value="1">硬座</option><option value="3">硬卧</option><option value="4">软卧</option>');
}
//初始化 if($("#refreshButton").size()<1){ // //重置后加载所有席别
// $("select[name$='_seat']").each(function(){this.blur(function(){
// alert(this.attr("id") + "blur");
// })});
初始化所有席别
//$(".qr_box :checkbox[name^='checkbox']").each(function(){$(this).click(reloadSeat)});
//reloadSeat(); //日期可选 //$("td.bluetext:first").html('<input type="text" name="orderRequest.train_date" value="' +$("td.bluetext:first").html()+'" id="startdatepicker" style="width: 150px;" class="input_20txt" οnfοcus="WdatePicker({firstDayOfWeek:1})" />'); $(".tj_btn").append($("<a style='padding: 5px 10px; background: #2CC03E;border-color: #259A33;border-right-color: #2CC03E;border-bottom-color:#2CC03E;color: white;border-radius: 5px;text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.2);'></a>").attr("id", "refreshButton").html("自动提交订单").click(function() {
//alert('开始自动提交订单,请点确定后耐心等待!');
if( this.innerHTML.indexOf("自动提交订单") == -1 ){
//doing
stop();
} else {
if( window.submit_form_check && !window.submit_form_check("confirmPassenger") ) {
return;
}
count = 0;
doing = true;
this.innerHTML = "停止自动提交";
reSubmitForm();
}
return false;
}));
$(".tj_btn").append("自动提交频率:")
.append($("<select id='freq'><option value='50' >频繁</option><option value='500' selected='' >正常</option><option value='2000' >缓慢</option></select>").change(function() {
freq = parseInt( $(this).val() );
}))
.append($msg);
//alert('如果使用自动提交订单功能,请在确认订单正确无误后,再点击自动提交按钮!');
}
};
}, true);

这就是源代码,有时间咱也学习学习这份文件。

[收藏] 传说中的12306买票插件-chrome专用的更多相关文章

  1. python3.7之12306抢票脚本实现

    悲催的12306,彻底沦为各路抢票软件的服务提供方.元旦伊始,纯粹12306官网及APP抢票,愈一周的时间,仅到手一张凌晨3:55回家的站票.为远离脑残,无奈选择抢票软件,预购年后返沪车票.BTW,研 ...

  2. 12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)

    郑重声明: 本文仅供学习使用,禁止用于非法用途,否则后果自负,如有侵权,烦请告知删除,谢谢合作! 开篇明义 本文针对自主开发的抢票脚本在抢票过程中常常遇到的请求无效等问题,简单分析了 12306 网站 ...

  3. 实测两款 GitHub 开源抢票插件,所有坑都帮你踩过了

    如果你对自己手速和市面上的各种 “加速包” 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会员费,也依旧抢不到票 ...

  4. python写12306抢票

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 利用splinter写的一个手动过验证及自动抢票的例子, 大家可以自己扩展或者弄错窗体.web端. ...

  5. Python 实现的 12306抢票脚本

    Python12306抢票脚本 本脚本使用一个类来实现所有代码,大体上分为以下几个模块及其步骤:- 初始化对象属性(在抢票前进行的属性初始化,包括初始化浏览器模拟对象,个人信息等).- 建立模拟浏览器 ...

  6. 12306 抢票项目霸榜 GitHub,标星即将破万

    十一将至,你买到回家的火车票了吗?如果没有,你可以试着打开 GitHub,在搜索栏键入 12306 的关键词,我相信你会发现一个新大陆.没错,这里有 1572 个抢票项目.它们大多用 Python.J ...

  7. 12306抢票算法居然被曝光了!!!居然是redis实现的

    导读 相信大家应该都有抢火车票的经验,每年年底,这都是一场盛宴.然而你有没有想过抢火车票这个算法是怎么实现的呢? 应该没有吧,咱们今天就来一一探讨.其实并没有你想的那么难 bitmap与位运算 red ...

  8. 12306订票助手.net版如何抢指定过路某一地点的火车票

    12306订票助手.net版如何抢指定路过某一地点的火车票? 直接举例: 广州到武汉,很多高铁,经过清远,衡阳,郴州,长沙等地.需要从清远上车.操作步骤如下: 1.先查询清远-武汉,打开右下角的自动预 ...

  9. FZU 2029 买票问题 树状数组+STL

    题目链接:买票问题 思路:优先队列维护忍耐度最低的人在队首,leave操作ok. vis数组记录从1到n的编号的人们是不是在队列中,top维护队首的人的编号.pop操作搞定. 然后,check操作就是 ...

随机推荐

  1. C# 软件版本号

    如果需要查看更多文章,请微信搜索公众号 csharp编程大全,需要进C#交流群群请加微信z438679770,备注进群, 我邀请你进群! ! ! --------------------------- ...

  2. 云原生 go-zero 微服务框架

    0. go-zero介绍 go-zero是一个集成了各种工程实践的web和rpc框架.通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验. go-zero包含极简的API定义和生成工具goc ...

  3. Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法

    在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...

  4. postgresql 和 mysql 数据库备份恢复以及时区问题

    概要 postgesql 12 备份/恢复脚本 时区设置 mysql 5.6 备份/恢复脚本 时区设置 概要 postgresql 和 mysql 是最常用的 2 种开源关系数据库, 很多项目也会优先 ...

  5. 多测师讲解 _教师(必备)_高级讲师肖sir

    教学心得1.备课要充分,防止第二天上课会出现一些突发情况2.上课要有自己的思路,不一定要按照课件上的讲3.上课气氛比较沉闷的时候,可以适当的开下玩笑,缓解大家的学习氛围4.讲课的时候提醒学员不要做笔记 ...

  6. Eclipse JSP +Tomcat 环境搭建 错误记录

    环境搭建请参考原文:https://www.cnblogs.com/james-lee/p/5964238.html 错误1:运行时,弹出如下错误:(如果没有此错误,请忽略) 原因是,我们之前点击了T ...

  7. springboot入门系列(四):SpringBoot和Mybatis配置多数据源连接多个数据库

    SpringBoot和Mybatis配置多数据源连接多个数据库 目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑.在SpringBo ...

  8. Vue留言 checked框案列

    在命令行窗口输入vue create "工程名"命令 来创建vue脚手架

  9. nginx给consul集群配置负载均衡

    upstream consul { server 127.0.0.1:8501; server 127.0.0.1:8502; server 127.0.0.1:8503; } server { li ...

  10. LinkedHashMap 实现LRU缓存

    date: 2020-07-09 13:52:00 updated: 2020-07-21 17:40:00 LinkedHashMap 实现LRU缓存 参考 LinkedHashMap是HashMa ...