zoukankan      html  css  js  c++  java
  • 12306 Pytho抢票代码

    1、需要先安装python环境

    2、安装selenium模拟用户来操作浏览器

    3、将chromedriver驱动放入chrome浏览器应用根目录

    4、用文本编辑器打开脚本,编辑购票人信息

    5、通过cmd运行软件,python tickets.py 上海 广州 2018-01-30

    6、程序打开浏览器后,请自己输入账号密码登录

    7、抢到票后,请付款

    # -*- coding: utf-8 -*-
    """
    @author: raoaro
    """
    #from splinter.browser import Browser
    from selenium import webdriver 
    from time import sleep
    import traceback
    import time, sys
    
    class huoche(object):
        """docstring for huoche"""
        driver_name=''
        executable_path=''
        #用户名,密码
        # cookies值得自己去找, 下面两个分别是上海, 太原南
        starts = u"%u4E0A%u6D77%2CSHH"
        ends = u"%u592A%u539F%2CTYV"
        # 时间格式2018-01-19
        dtime = u"2018-01-19"
        # 车次,选择第几趟,0则从上之下依次点击
        order = 0
        ###乘客名
        users = [u"raorao"]
        ##席位
        xb = u"二等座"
        pz=u"成人票"
    
        """网址"""
        ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init"
        login_url = "https://kyfw.12306.cn/otn/login/init"
        initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"
        buy="https://kyfw.12306.cn/otn/confirmPassenger/initDc"
        login_url='https://kyfw.12306.cn/otn/login/init'
        
        def __init__(self):
            self.driver_name='chrome'
            self.executable_path='/usr/local/bin/chromedriver'
    
        def login(self):
            #self.driver.visit(self.login_url)
            self.driver.get(self.login_url)
            # 填充密码
            #self.driver.fill("loginUserDTO.user_name", self.username)
            # sleep(1)
            #self.driver.fill("userDTO.password", self.passwd)
            print("等待验证码,自行输入...")
            while True:
                if self.driver.current_url != self.initmy_url:
                    sleep(1)
                else:
                    break
    
        def start(self):
            #self.driver=Browser(driver_name=self.driver_name,executable_path=self.executable_path)
            self.driver=webdriver.Chrome();
            self.driver.set_window_size(1400, 1000)
            self.login()
            # sleep(1)
            self.driver.get(self.ticket_url)
            try:
                print("购票页面开始...")
                # sleep(1)
                # 加载查询信息
    
                self.driver.add_cookie({'name':'_jc_save_fromStation','value':self.starts});
                self.driver.add_cookie({'name':'_jc_save_toStation','value':self.ends});
                self.driver.add_cookie({'name':'_jc_save_fromDate','value':self.dtime});
    
                #self.driver.reload()
                self.driver.refresh()
                count=0
                if self.order!=0:
                    while self.driver.current_url==self.ticket_url:
                        #self.driver.find_by_text(u"查询").click()
                        self.driver.find_element_by_id('query_ticket').click()
                        count += 1
                        print ("循环点击查询... 第 "+str(count)+"")
                        
                        try:
                            #self.driver.find_by_text(u"预订")[self.order - 1].click()
                            self.driver.find_elements_by_class_name("btn72")[self.order - 1].click()
                        except Exception as e:
                            print(e)
                            print ("还没开始预订")
                            continue
                        sleep(1)
                else:
                    while self.driver.current_url == self.ticket_url:
                        #self.driver.find_by_text(u"查询").click()
                        self.driver.find_element_by_id('query_ticket').click()
                        count += 1
                        print ("循环点击查询... 第 "+str(count)+"")
                        
                        try:
                            #for i in self.driver.find_by_text(u"预订"):
                            #for i in self.driver.find_element_by_class_name("btn72"):
                            for i in self.driver.find_elements_by_class_name("btn72"):
                                i.click()
                                sleep(1)
                        except Exception as e:
                            print (e)
                            print ("还没开始预订 "+str(count))
                            continue
                        sleep(1)
                print ("开始预订...")
                # sleep(3)
                # self.driver.reload()
                sleep(1)
                print ('开始选择用户...')
                for user in self.users:
                    #self.driver.find_by_text(user).last.click()
                    #self.driver.find_element_by_xpath("label[contains(text(),'"+user+"')]").click()
                    for i in self.driver.find_elements_by_tag_name("label"):
                        if i.text==user:
                            i.click()
                            print("选中"+user)
    
                print ("提交订单...")
                sleep(1)
                # self.driver.find_by_text(self.pz).click()
                # self.driver.find_by_id('').select(self.pz)
                # # sleep(1)
                # self.driver.find_by_text(self.xb).click()
                # sleep(1)
                #self.driver.find_by_id('submitOrder_id').click()
                self.driver.find_element_by_id('submitOrder_id').click()
                # print u"开始选座..."
                # self.driver.find_by_id('1D').last.click()
                # self.driver.find_by_id('1F').last.click()
    
                sleep(1.5)
                print ("确认选座...")
                self.driver.find_element_by_id('qr_submit_id').click()
    
            except Exception as e:
                print (e)
    
    cities= {'成都':'%u6210%u90FD%2CCDW',
    '重庆':'%u91CD%u5E86%2CCQW',
    '南昌':'%u5357%u660C%2CNCG',  
    '北京':'%u5317%u4EAC%2CBJP',
    '广州':'%u5E7F%u5DDE%2CGZQ', 
    '杭州':'%u676D%u5DDE%2CHZH',
    '宜昌':'%u5B9C%u660C%2CYCN',
    '郑州':'%u90D1%u5DDE%2CZZF',
    '深圳':'%u6DF1%u5733%2CSZQ',
    '西安':'%u897F%u5B89%2CXAY',
    '大连':'%u5927%u8FDE%2CDLT',
    '武汉':'%u6B66%u6C49%2CWHN',
    '上海':'%u4E0A%u6D77%2CSHH',
    '南京':'%u5357%u4EAC%2CNJH',
    '合肥':'%u5408%u80A5%2CHFH'}
    
    if __name__ == '__main__':
        huoche=huoche()
        huoche.starts=cities[sys.argv[1]]
        huoche.ends = cities[sys.argv[2]]
        huoche.dtime = sys.argv[3]
        huoche.start()
    View Code
  • 相关阅读:
    PostgreSQL数据库
    phpcms网站搬家 至 服务器 完整并且详细过程
    phpcms网页替换验证码功能 及 搜索功能
    用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)
    php判断手机段登录,以及phpcms手机PC双模板调用
    php 手动搭建环境
    phpcms内容页替换
    phpcms列表页替换
    phpcms首页替换
    phpcms栏目点击选中
  • 原文地址:https://www.cnblogs.com/raorao1994/p/8383599.html
Copyright © 2011-2022 走看看