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
原文地址:https://www.cnblogs.com/raorao1994/p/8383599.html