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方式, ...
随机推荐
- SpringMVC 之URL请求到Action的映射(1)
URL路径映射 1.1.对一个action配置多个URL映射: @RequestMapping(value={"/index", "/hello"}, meth ...
- mongodb用mongoose得到的对象不能增加属性解决
一,先定义了一个goods(商品)的models var mongoose = require('mongoose'); var Schema = mongoose.Schema; var produ ...
- vue日常练习一
<html lang="en"> <head> <meta charset="UTF-8"> <title>Ti ...
- ASP.NET——配置文件——连接字符串
一.连接字符串 1.通过<connectionStrings>方式: 方式一:SqlServer身份验证 <connectionStrings> <add name=&q ...
- vesamenu.c32:not a COM32R image报错解决方案
今天用U盘刻录安装Linux Mint 的时候,一直出现 vesamenu.c32:not a COM32R image这个报错,查了很久,原因好像是电脑是老电脑的原因.处理的办法很简单,只需要输入l ...
- lombok与spring的恩怨
下面是lombok按照 Java Bean 的规范生成的 下面是spring mvc里jackson 需要的 xXxx问题还是顺势而为吧
- apt-cyg update --2017-02-17 07:57:24-- http://mirrors.163.com/cygwin//x86_64/setup.bz2 正在解析主机 mirrors.163.com... 123.58.173.185, 123.58.173.186 正在连接 mirrors.163.com|123.58.173.185|:80... 已连接。 已发出 HTT
apt-cyg update ---- ::-- http://mirrors.163.com/cygwin//x86_64/setup.bz2 正在解析主机 mirrors.163.com... 1 ...
- re.findall(?: ) ?:取消优先获取组的权限
- oracle 之sys 、system区别
角色 1)最重要的区别,存储的数据的重要性不同sys--所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手 ...
- 关于TortoiseGit设置代理服务器会自动取消的问题解决方法
在前些日子,我使用TortoiseGit的并给其设置代理服务器的时候,每次设置好之后,关闭打开总是会自动取消勾选,通过不断的尝试和分析之后,得出了解决方案. 首先,这个配置项是保存在HOME环境变量对 ...