[转载]12306订票小工具 - 罗旭成 - 博客园

[转载]12306订票小工具 – 罗旭成 – 博客园.

前言:一年一度刷票接近尾声了,最近本人也经常在刷 票,也在为这个事情而烦恼,花了很多时间和精力去抢票,甚至一起叫了许多人一起抢票,上班时间想的都是抢票,真是辛苦,经过多天的折磨,终于拿到回家的车 票了,不容易。最近一段时间也在博客园看了很多文章,看到很多人写的关于12306的一些工具,感觉有些还不错,但是能真的用起来还存在差距,特别是在验 证码这块还是存在问题,到了关键时候还是用不了,感觉不靠谱,还不如用12306自带的刷票功能。

在这里还真要说说12306这个网站,每年这个网站都是要被别人吐槽,每年一到关键时刻就出问题,不是刷不了票,要不就是资料泄露,最近都出现订票出错的 情况,导致明明订的的是长沙自动帮你订到三亚去了,这真是怪哉,O(∩_∩)O哈哈~每天都有很多文章是关于12306这个网站的,真的这个网站做好就有 那么难,每年都要投入那么多经费,到头来还是一样,让人订不到票,黄牛缺可以在十多分钟内订走上千张票,真是不可思议,看来这样的年代还是有技术才有王 道。还是希望国家能多收铁路,增大运力,这是解决问题根本,哎…扯远了。

开发这个工具主要是用.NET开发的,主要用到修改网站本山的JavaScript,可以让刷新时间变短,这样增加刷票的次数,增加成功率,究竟是否真的有效,还需各位自己验证,本人并不敢打包票。

以下为html代码:

复制代码
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
        var time = 5000;
    </script>
</head>
<body>
    在下面的文本框输入“有票了”或者等待10秒钟试试看:<br />
    <input type="text" id="txtName" /><input type="button" value="输入内容" />
    <script type="text/javascript">
        window.setTimeout("txtName.value ='有票了'", 10000);
        //autosubmitcheckticketinfo.style.
    </script>
    <div id=autosubmitcheckticketinfo style="POSITION: fixed; LEFT: 381px; Z-INDEX: 20000; DISPLAY: none; TOP: 100px" dhxbox="1" jquery1910021022635977561266="490">
        <div class="up-box w664" id=content_autosubmitcheckticketinfo>
            <div class=up-box-hd>已查到车票,请核对以下信息 </div>
            </div>
        </div>
</body>
</html>
复制代码

界面如下:

点击“继续刷票”按钮即可打开12306网站,其他动作就和进入12306一模一样了,输入用户和密码,选好乘车人和乘车日期等等相关信息后,选好 最上面的刷新间隔即可,最多可以选择5秒钟,最低可以选择1秒钟,把如上信息全部填好后,点击“查询”即实现刷票了,这样就会按照你设定的时间间隔进行刷 票了。

以下从源码层面进行分析:

FormLoad中主要加载默认网址,并设定默认的刷新时间。

复制代码
        #region * FormLoad
        private void Form1_Load(object sender, EventArgs e)
        {
            this.numericUpDown1.Value = 5;
            string uriString = ((DateTime.Now.Second % 2) == 0) ? "http://www.cnblogs.com/jara/" : "http://www.cnblogs.com/jara/";
            this.webBrowser1.Url = new Uri(uriString);
        }
        #endregion
复制代码

开始测试页按钮实现的代码(加载默认的网址,并且启动时间计时器):

复制代码
    private void btnOpenUrl_Click(object sender, EventArgs e)
        {
            string text = this.txtUrl.Text;
            if (text == "TestHtml.html")
            {
                text = Application.StartupPath + @"\" + text;
            }
            this.webBrowser1.Url = new Uri(text);
            this.timer1.Start();
        }
复制代码

开始刷票实现的代码(一旦有票就会将出票窗口弹出到最前端,即便你在工作状态,也不会错过订票的机会,这样就会你在上班时间工作更安心):

复制代码
        private void btnOpenUrl2_Click(object sender, EventArgs e)
        {
            if (this.btnOpenUrl2.Text == "继续刷票")
            {
                this.timer1.Start();
                this.lblMsg.Text = "弹窗监视器工作中... ...当期刷新间隔:" + this.autoSearchTime + " 毫秒。";
            }
            else
            {
                this.txtUrl.Text = "https://kyfw.12306.cn/otn/leftTicket/init";
                this.btnOpenUrl.PerformClick();
                MessageBox.Show("请在购票网页中登录并输入你的购票信息,开启自动提交功能,\r\n然后,本程序将在网页提交订单的时候自动弹出窗体提醒你及时进行操作!");
                this.btnOpenUrl2.Text = "继续刷票";
            }
        }
复制代码

Timer实现的事件:

复制代码
 private void timer1_Tick(object sender, EventArgs e)
        {
            if (this.webBrowser1.Document != null)
            {
                if (this.txtUrl.Text == "TestHtml.html")
                {
                    this.TestDom();
                }
                else if (this.txtUrl.Text.Contains("leftTicket"))
                {
                    this.leftTicket();
                }
            }
        }

        private void TestDom()
        {
            HtmlElement elementById = this.webBrowser1.Document.GetElementById("txtName");
            if (elementById != null)
            {
                IHTMLInputTextElement domElement = (IHTMLInputTextElement)elementById.DomElement;
                if (domElement.value == "有票了")
                {
                    this.timer1.Stop();
                    mshtml.IHTMLElement element4 = (mshtml.IHTMLElement)this.webBrowser1.Document.GetElementById("autosubmitcheckticketinfo").DomElement;
                    element4.style.display = "";
                    base.TopMost = true;
                    MessageBox.Show("有票了!!!");
                    base.TopMost = false;
                    ((mshtml.IHTMLWindow2)this.webBrowser1.Document.Window.DomWindow).execScript("time=1000;alert('时间改变了:'+time);", "javascript");
                }
            }
        }

        private void leftTicket()
        {
            HtmlElement elementById = this.webBrowser1.Document.GetElementById("autosubmitcheckticketinfo");
            if (elementById != null)
            {
                if (this.changeSearchTime)
                {
                    ((mshtml.IHTMLWindow2)this.webBrowser1.Document.Window.DomWindow).execScript("autoSearchTime = " + this.autoSearchTime + " ;", "javascript");
                    this.changeSearchTime = false;
                }
                mshtml.IHTMLElement domElement = (mshtml.IHTMLElement)elementById.DomElement;
                if ((domElement.style.display == "block") || string.IsNullOrEmpty(domElement.style.display))
                {
                    this.timer1.Stop();
                    if (base.WindowState == FormWindowState.Minimized)
                    {
                        base.WindowState = FormWindowState.Maximized;
                        domElement.style.left = "400px";
                    }
                    base.TopMost = true;
                    MessageBox.Show("有票了,请在浏览器中完成操作!\r\n 如果你返回修改了订票规则(比如修改席别),请单击下【继续刷票】按钮!");
                    this.lblMsg.Text = "弹窗监视器已经停止,请单击【继续刷票】按钮开启!";
                    base.TopMost = false;
                }
            }
        }
复制代码
      private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            this.changeSearchTime = true;
            this.autoSearchTime = 0x3e8 * ((int)this.numericUpDown1.Value);
        }

以上即可实现抢票的,这个工具的亮点主要在于可以实现一秒钟刷票的功能,用12306只能是5秒钟刷票,这样的话刷新的频率提高了,这样即可实现更快刷到票,此工具主要目的是好玩,不可用于其它目的,本人也声明不承担一切后果。

运行这个工具需要电脑安装了.net框架,一般情况下Win7、Win8都有自动的.net框架的,XP系统应该没有,如果没有这个框架在使用这个工具之前还需安装.NET框架,在百度里搜索就有。

程序:http://files.cnblogs.com/jara/V1.0.0.1.rar V.1.0.0.1版。

待续…

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏