加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

12306订票代码--python订票的另类方式

发布时间:2020-05-24 23:09:25 所属栏目:Python 来源:互联网
导读:12306订票代码--python订票的另类方式

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

#!/usr/bin/env python
# -*- encoding:utf-8 -*-
'''
Created on 2014年12月30日

@author: liujichao
'''
import sys
import logging
from splinter import Browser
import time
logging.getLogger().setLevel(logging.ERROR)
reload(sys)
sys.setdefaultencoding('utf-8')  # @UndefinedVariable
browser = Browser()
def checkTick():
    while True:
        if int(time.strftime("%H",time.localtime())) in [23,1,2,3,4,5,6]:
            print "23点到7点不能登录" 
            time.sleep(200)
            continue
            pass
        break
        pass
    browser.visit("https://kyfw.12306.cn/otn/login/init")
    browser.find_by_id("username").fill("用户名")
    browser.find_by_id("password").fill("密码")
    browser.find_by_id("randCode").click()
    
    while True:        
        while len(browser.find_by_id("randCode").value)<4 or not browser.find_by_id("i-okmypasscode1").visible:
            time.sleep(1)
            pass
        browser.find_by_id("loginSub").click()
        warnAlert=browser.find_by_id("content_defaultwarningAlert_id")
        if  len(warnAlert)!=0 and warnAlert.visible:
            browser.find_by_id("qd_closeDefaultWarningWindowDialog_id").click()
            browser.execute_script('''refreshImg('login','sjrand');''')
            browser.find_by_id("randCode").click()
            continue
            pass
        break
        pass
    while browser.url !="https://kyfw.12306.cn/otn/index/initMy12306":
        print browser.url
        time.sleep(1)
        pass    
    browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')
    #browser.fill('kw','splinter - python acceptance testing for web applications')
    #browser.execute_script("$('body').empty()")
    #print browser.find_by_id("login_user")
    #browser.find_by_id("login_user").click()
    #print browser.cookies()
    
    browser.find_by_id("fromStationText").click()
    browser.execute_script('''$("#ul_list1 > li:nth-child(1)").click();
    ''')
    
    browser.find_by_id("toStationText").click()
    browser.execute_script('''
    $("#nav_list3").click();
    $("a.cityflip:nth-child(1)").click();
    $("#ul_list3 > li:nth-child(21)").click();
    ''')
    
    
    browser.find_by_value("G").check()
    #browser.find_by_id("train_date").click()
    #time.sleep(10)
    browser.execute_script('''
    setInterval(function(){
    $.ajax({
            type: 'post',url: '/otn/login/checkUser',data: {
            },beforeSend: function (c) {
                c.setRequestHeader('If-Modified-Since','0');
                c.setRequestHeader('Cache-Control','no-cache')
            },success: function (e) {
                if (!e.data.flag) {
                   location.href="https://kyfw.12306.cn/otn/login/init";
                } 
            }
        });
},2000); 
    ''')
    while True:
        if browser.url=="https://kyfw.12306.cn/otn/login/init":
            #被踢了
            print "被踢了"
            raise Exception("被踢")
            pass
        browser.execute_script('''$("#train_date").val("2015-02-18");''')
        browser.find_by_id("query_ticket").click()
        browser.execute_script("CLeftTicketUrl = 'leftTicket/queryT?_r="+str(time.time())+"';")
        browser.execute_script('''$("#train_date").val("2015-02-18");''')
        warnAlert=browser.find_by_id("content_defaultwarningAlert_id")
        if  len(warnAlert)!=0:
            browser.find_by_id("qd_closeDefaultWarningWindowDialog_id").click()
            pass
        browser.execute_script('''
        iflagt=false;
$('#queryLeftTable tr').each(function () {
  trId = $(this).attr('id');
  if (/^ticket/.test(trId)) {
    tid=trId.replace("ticket_","");
    tranCode=$("#"+trId+"_train").find("a").text()
    if("G655,G6741,G67,G517,G491,".indexOf(tranCode+",")!=-1){
        //二等座位
        ZEtxt=$("#ZE_"+tid).text();
        zcount=0;
        try 
        { 
         zcount=parseInt(ZEtxt)
        } catch (e) {zcount=0;} 
      console.log(ZEtxt);
      txtInfo=$("#"+trId+">.no-br").text()
      if((ZEtxt=="有" || zcount>1) && txtInfo!="23:00-07:00系统维护时间"){
        $(this).find(".btn72").click();
        iflagt=true;
        return false;
      }
    }
    
  }
});

''')
        
        if browser.evaluate_script("iflagt;"):
            break
            pass
        else:
            print "无"
            pass
        time.sleep(3)
        pass
    while browser.url !="https://kyfw.12306.cn/otn/confirmPassenger/initDc":
        print browser.url
        time.sleep(1)
        pass   
    browser.find_by_id("gd").click()
    browser.find_by_id("normalPassenger_0").check()
    browser.find_by_id("normalPassenger_24").check()
    browser.find_by_id("randCode").click()
    
    while len(browser.find_by_id("randCode").value)<4:
        time.sleep(1)
        pass
    browser.is_element_not_present_by_id(id,wait_time=None)
    while not browser.find_by_id("checkticketinfo_id").visible:
        time.sleep(0.5)
        pass
    browser.find_by_id("qr_submit_id").click()
    #browser.find_by_id("fromStation").fill("BXP")
    #browser.find_by_id("train_date").fill("BXP")
    #browser.find_by_id("query_ticket").click()
    #print browser.html
    print browser.cookies.all() 
    pass
if __name__ == '__main__':
    while True:
        try:
            checkTick()
        except Exception,e:
            browser.quit()
            browser = Browser()
            print e
            pass
        pass
    pass

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读