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()
12306 Pytho抢票代码的更多相关文章
- 13206抢票代码 py
抢票代码 https://github.com/Bingshuli/12306Python 谷歌驱动 http://chromedriver.storage.googleapis.com/index. ...
- Python实例--12306的抢票功能
基础知识学习 目标: 通过python程序实现自动登录下单功能 知识点: Selenium + 云打码 + Python 学习链接: 1. Python学习--Selenium模块 2. Python ...
- 抢票季:吐槽12306 & 分享抢票经验
又是一年一度的春运抢票季,不管你是北上.南下或者东进,在外漂泊了一年,有钱没钱总是要回家过年的. [图片来源于网络] 吐槽:12306抢票的悲伤 据说12306改版了,新版本里面除了UI这些面儿上的改 ...
- 基于selenium+java的12306自动抢票
import java.util.concurrent.TimeUnit; import org.openqa.selenium.By;import org.openqa.selenium.Keys; ...
- 12306抢票系统——ER图及数据表
12306自动抢票系统——ER图及数据表 1. 抢票系统ER图 数据表 2.抢票系统数据结构表 (1)列车表 Trains table 字段名 数据类型 说明 是否为主键 Train_id strin ...
- 归心似箭,IT达人分享抢票攻略
[51CTO专稿]随着春节一天天临近,“购票难”的问题也愈发凸显,猎豹.火狐.360等“春运抢票神器”占领了各大网站的重要版面,“技术抢票”成为炙手可热的话题,看看身为程序员的邓以克是如何抢到回家的票 ...
- 春运到了,带你用python来抢票回家!
不知不觉,一年一度的春运抢票大幕已经拉开,想快速抢到回家的车票吗?作为程序员,这些技术手段,你一定要知道. 为了让大家更快捷更便利的抢火车票,各种各样的抢票软件应需而生,这类软件大部分都是付费抢票的机 ...
- 马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版
时隔一年多,终于朋友的忽悠下吧抢票Demo的最后一步完善了,与2014年1月9日成功生成车票. Demo仅经过自己测试,并未在高峰期进行测试,代码质量很差,因为赶工,套用去年模板并未使用设计模式. 代 ...
- c# 模拟 网页实现12306登陆、自动刷票、自动抢票完全篇
这一篇文章,我将从头到尾教大家使用c#模拟网页面登陆12306网站,自动刷票,选择订票人,到最后一步提交订单.研究过HTTP协议的童鞋们都知道,我们在访问网站时,是有两种方式的,POST和GET方式, ...
随机推荐
- windows cmd for paramiko
wmic cpu get LoadPercentage wmic memphysical list brief wmic memphysical get MaxCapacity 主板芯片组支持最 ...
- java 多线程系列---JUC原子类(一)之框架
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...
- ABP系统设置
代码分析 在abp中添加系统设置,都是在模块的预初始化方法中添加的. Configuration.Settings.Providers.Add<EmailSettingProvider>( ...
- 万恶的mysql deadlocks
https://github.com/aneasystone/mysql-deadlocks/blob/master/11.md https://blog.csdn.net/dhfzhishi/art ...
- Flow Layout
--------------siwuxie095 将根面板 contentPane 的布局切换为 Flow Layout Flow La ...
- 按钮控件JButton的使用
---------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:TestButton. ...
- Node.js的__dirname,__filename,process.cwd(),./的含义
简单说一下这几个路径的意思,: __dirname: 获得当前执行文件所在目录的完整目录名 __filename: 获得当前执行文件的带有完整绝对路径的文件名 process.cwd():获得当前执行 ...
- Freemarker 使用注意事项
上次借助 Freemaker 模板引擎来动态构造 Kylin 访问的 SQL,在使用过程中,遇到了一些坑. ${} 输出变量时需要注意: 示例 WHERE shop_id = ${val} 里的 v ...
- ROS Learning-019 learning_tf-03(编程) 添加额外的坐标系 (Python版)
ROS Indigo learning_tf-03 添加额外的坐标系 (Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...
- ROS Learning-018 Arduino-For-ROS-003 (总结篇) 模板程序 即 如何运行
Arduino For ROS-003 - (总结篇) 模板程序 即 如何运行 我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位 Arduino的版本:Arduino 1.6.11 ...