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()

12306 Pytho抢票代码的更多相关文章

  1. 13206抢票代码 py

    抢票代码 https://github.com/Bingshuli/12306Python 谷歌驱动 http://chromedriver.storage.googleapis.com/index. ...

  2. Python实例--12306的抢票功能

    基础知识学习 目标: 通过python程序实现自动登录下单功能 知识点: Selenium + 云打码 + Python 学习链接: 1. Python学习--Selenium模块 2. Python ...

  3. 抢票季:吐槽12306 & 分享抢票经验

    又是一年一度的春运抢票季,不管你是北上.南下或者东进,在外漂泊了一年,有钱没钱总是要回家过年的. [图片来源于网络] 吐槽:12306抢票的悲伤 据说12306改版了,新版本里面除了UI这些面儿上的改 ...

  4. 基于selenium+java的12306自动抢票

    import java.util.concurrent.TimeUnit; import org.openqa.selenium.By;import org.openqa.selenium.Keys; ...

  5. 12306抢票系统——ER图及数据表

    12306自动抢票系统——ER图及数据表 1. 抢票系统ER图 数据表 2.抢票系统数据结构表 (1)列车表 Trains table 字段名 数据类型 说明 是否为主键 Train_id strin ...

  6. 归心似箭,IT达人分享抢票攻略

    [51CTO专稿]随着春节一天天临近,“购票难”的问题也愈发凸显,猎豹.火狐.360等“春运抢票神器”占领了各大网站的重要版面,“技术抢票”成为炙手可热的话题,看看身为程序员的邓以克是如何抢到回家的票 ...

  7. 春运到了,带你用python来抢票回家!

    不知不觉,一年一度的春运抢票大幕已经拉开,想快速抢到回家的车票吗?作为程序员,这些技术手段,你一定要知道. 为了让大家更快捷更便利的抢火车票,各种各样的抢票软件应需而生,这类软件大部分都是付费抢票的机 ...

  8. 马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版

    时隔一年多,终于朋友的忽悠下吧抢票Demo的最后一步完善了,与2014年1月9日成功生成车票. Demo仅经过自己测试,并未在高峰期进行测试,代码质量很差,因为赶工,套用去年模板并未使用设计模式. 代 ...

  9. c# 模拟 网页实现12306登陆、自动刷票、自动抢票完全篇

    这一篇文章,我将从头到尾教大家使用c#模拟网页面登陆12306网站,自动刷票,选择订票人,到最后一步提交订单.研究过HTTP协议的童鞋们都知道,我们在访问网站时,是有两种方式的,POST和GET方式, ...

随机推荐

  1. Python数据库(一)-Mysql数据库的连接

    首先需要安装pymysql模块 然后用pymysql连接mysql并执行命令来查看数据 连接mysql数据库后需要创建游标来执行SQL语句 # -*- coding:utf-8 -*- __autho ...

  2. SRW锁的使用

    SRWLock的目的和关键段相同:对一个资源进行保护,不让其它线程访问它.但是,与关键段不同的是,SRWLock允许我们区分哪些想要读取资源的值 的线程(读取者线程)和想要更新资源的值的线程(写入者线 ...

  3. apache + tomcat 负载均衡分布式集群配置

    Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...

  4. x264的一些参数设置对编码效率的影响

    i_luma_deadzone[0]和i_luma_deadzone[1]分别对应inter和intra, 取值范围1~32,测试可以得知,这连个参数的调整可以对数据量有很大影响,值越大数据量相应越少 ...

  5. java之类和对象

    类的成员: 成员变量和成员函数. 成员函数:构造函数和普通函数. 构造函数: 作用:自动对对象进行初始化 特点:1.方法名和类名一致 2.没有返回值 问: 1.我们能够定义几次构造函数? 我们可以定义 ...

  6. re.findall(?: ) ?:取消优先获取组的权限

  7. Ajax02 什么是json、json语法、json的使用、利用jQuery实现ajax

    目录 1什么是json 2json语法 3json的使用 4利用jQuery实现ajax编程 1 什么是json JavaScript Object Notation(JavaScript 对象表示法 ...

  8. ubuntu16安装pylearn2 出现错误提示importerror:no module named six.moves

    由于市面上的一些教程时间比较早,入门学习时跟随教程安装容易出现各种错误,这些错误基本都是版本不同导致的 所以,我们安装过程中一定要指出包的版本,如果你已经遇到no module named six.m ...

  9. ZBar在Windows上的使用 -- ImageMagick and OpenCV

    博客转载自:https://blog.csdn.net/sunflower_boy/article/details/49095265 1. 下载ZBar v0.10 http://zbar.sourc ...

  10. 算法Sedgewick第四版-第1章基础-008一用数组实现栈(泛型、可变大小)

    package algorithms.ADT; /*************************************************************************** ...