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

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

发布时间:2020-12-17 17:31:26 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/usr/bin/env python# -*- encoding:utf-8 -*-'''Created on 2014年12月30日@author: liujichao'''import sysimport loggingfrom splinter import B

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#!/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

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

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

    推荐文章
      热点阅读