爱生活,爱技术.Net之家首页
.Net之家
.Net技术交流,尽享编程之美
    个人资料
    我有我在
    我有我在
    • 访问:4次
    • 积分:218分
    • 级别:初级程序员
    • 登陆次数:28次
    • 注册时间:01月09日 12:33
    • 最近登录:02月22日 11:30

简单实用的铁道部12306.cn网站自动化登录( 更新版 )

标签: 12306.cn 自动 登录 阅读人次:137 评论(0) 推荐()

更新说明

  • 修正了之前没有问题的代码现在却出现脚本异常问题
    • http://www.cnblogs.com/cnshangsha/archive/2012/01/12/12306cnautologin.html
    • 新代码如下:
    •  
      function submitForm() {
          var _ifrMain = document.getElementById('main');
          var userName = _ifrMain.contentWindow.document.getElementById('UserName');
          var password = _ifrMain.contentWindow.document.getElementById('password');
          var randCode = _ifrMain.contentWindow.document.getElementById('randCode');
       
          var submitUrl = url;
          $.ajax({
              type: "POST",
              url: submitUrl,
              data: {
                  "loginUser.user_name": userName.value
                , "user.password": password.value
                , "randCode": randCode.value
              },
              timeout: 30000,
              success: function (msg) {
                  if (msg.indexOf('请输入正确的验证码') > -1) {
                      alert('请输入正确的验证码!');
                  };
                  if (msg.indexOf('当前访问用户过多') > -1) {
                      reLogin('回调结果:当前访问用户过多');
                  }
                  else {
                      location.replace(queryurl);
                  };
              },
              error: function (msg) {
                  reLogin('回调结果:错误');
              },
              beforeSend: function (XHR) {
                 ;
              }
          });
      }
       
      var count = 1;
      function reLogin(msg) {
          count++;
          skm_LockScreen("(" + count + ")次登录中..." + msg);
          setTimeout(submitForm, 500);
      }
       
      function skm_LockScreen(str) {
          scroll(0, 0);
          var back = document.getElementById('skm_LockBackground');
          var pane = document.getElementById('skm_LockPane');
          var text = document.getElementById('skm_LockPaneText');
       
          var LockBackgroundCssString = "position: absolute;top: 0px;left: 0px;visibility: visible;display: block;width: 105%;height: 105%;background-color: #666;z-index: 999;filter: alpha(opacity=75);opacity:0.75;padding-top: 20%;";
       
          var LockPaneCssString = "z-index: 1000;position: absolute;top: 0px;left: 0px;padding-top: 25%;visibility: visible;display: block;text-align: center;width: 100%;";
       
          var textCssString = "width: 55%;background-color: #969;color: White;font-size: large;border: dotted 1px White;padding: 9px;margin-left: auto;margin-right: auto;";
           
          if (back)
              back.style.cssText = LockBackgroundCssString;
          if (pane)
              pane.style.cssText = LockPaneCssString;
          if (text) {
              text.innerHTML = str;
              text.style.cssText = textCssString;
          }
      }
       
      var loginoutElement = document.getElementById('login_out');
      loginoutElement.innerHTML = "<div id='skm_LockBackground' style='display: none;visibility: hidden;position: absolute;top: -100px;left: -100px;'></div><div id='skm_LockPane' style='display: none;visibility: hidden;position: absolute;top: -100px;left: -100px;'><div id='skm_LockPaneText'> </div></div>";
       
      submitForm();

       

  • 增加了友好的锁屏信息 
    •  
  • 多进程登录 
    •  
  • 代码测试能目前还是能正常登录的,请网友放心使用 
    •  
  • Bug
    • 目前代码自动登录的频率是一秒两次,有一次在登录次数达到3百多次的时候 ,网页出现了拒绝访问的错误,  难道铁道部的后台程序判断了当前用户请求次数频繁, 把请求列入了黑名单?

铁道部网站登录难点分析

  • 必须使用微软IE浏览器 
    • 铁道部网站只支持IE在线付款
  • 网站使用Https协议
    • 客户端不允许跨域访问 

技术解析

  • 使用微软IE开发者工具栏即可破解自动化登录过程

开始步骤