Python 12306抢火车票脚本


Posted in Python onFebruary 07, 2018

本文实例为大家分享了Python 12306抢火车票的具体代码,供大家参考,具体内容如下

# -*- coding: utf-8 -*-
from splinter.browser import Browser
from time import sleep
import traceback
import time, sys


class huoche(object):
 """docstring for huoche"""
 driver_name = ''
 executable_path = ''
 # 用户名,密码
 username = u"name"
 passwd = u"passwd"
 # cookies值得自己去找, 下面两个分别是上海, 太原南
 starts = u"%u4E0A%u6D77%2CSHH"
 ends = u"%u592A%u539F%2CTYV"
 # 时间格式2018-01-19
 dtime = u"2018-01-19"
 # 车次,选择第几趟,0则从上之下依次点击
 order = 0
 ###乘客名
 users = [u"你的名字"]
 ##席位
 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"

 def __init__(self):
 self.driver_name = 'chrome'
 self.executable_path = 'chromedriver.exe'

 def login(self):
 self.driver.visit(self.login_url)
 # 填充密码
 self.driver.fill("loginUserDTO.user_name", self.username)
 # sleep(1)
 self.driver.fill("userDTO.password", self.passwd)
 self.driver.find_by_text(u"登录").click()
 print
 u"等待验证码,自行输入..."
 print("start to login")
 while True:
  if self.driver.url != self.initmy_url:
  sleep(1)
  else:
  break
 print("end to login")
 def start(self):
 self.driver = Browser(driver_name=self.driver_name, executable_path=self.executable_path)
 self.driver.driver.set_window_size(1400, 1000)
 self.login()
 # sleep(1)
 self.driver.visit(self.ticket_url)
 try:
  print
  u"购票页面开始..."
  # sleep(1)
  # 加载查询信息
  self.driver.cookies.add({"_jc_save_fromStation": self.starts})
  self.driver.cookies.add({"_jc_save_toStation": self.ends})
  self.driver.cookies.add({"_jc_save_fromDate": self.dtime})

  self.driver.reload()

  count = 0
  if self.order != 0:
  while self.driver.url == self.ticket_url:
   self.driver.find_by_text(u"查询").click()
   count += 1
   print
   u"循环点击查询... 第 %s 次" % count
   # sleep(1)
   try:
   self.driver.find_by_text(u"预订")[self.order - 1].click()
   except Exception as e:
   print
   e
   print
   u"还没开始预订"
   continue
  else:
  while self.driver.url == self.ticket_url:
   self.driver.find_by_text(u"查询").click()
   count += 1
   print
   u"循环点击查询... 第 %s 次" % count
   # sleep(0.8)
   try:
   for i in self.driver.find_by_text(u"预订"):
    i.click()
    sleep(1)
   except Exception as e:
   print
   e
   print
   u"还没开始预订 %s" % count
   continue
  print
  u"开始预订..."
  # sleep(3)
  # self.driver.reload()
  sleep(1)
  print
  u'开始选择用户...'
  for user in self.users:
  self.driver.find_by_text(user).last.click()

  print
  u"提交订单..."
  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()
  # print u"开始选座..."
  # self.driver.find_by_id('1D').last.click()
  # self.driver.find_by_id('1F').last.click()

  sleep(1.5)
  print
  u"确认选座..."
  self.driver.find_by_id('qr_submit_id').click()

 except Exception as e:
  print
  e


cities = {'成都': '%u6210%u90FD%2CCDW',
  '重庆': '%u91CD%u5E86%2CCQW',
  '北京': '%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["杭州"]
 huoche.ends = cities["上海"]
 huoche.dtime = "2018-02-05"
 huoche.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python复制文件的方法实例详解
May 22 Python
Python enumerate索引迭代代码解析
Jan 19 Python
python实现excel读写数据
Mar 02 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
python conda操作方法
Sep 11 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
Python实现数字的格式化输出
Aug 01 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
Python基于Opencv识别两张相似图片
Apr 25 Python
Python基础详解之描述符
Apr 28 Python
python实现自动清理文件夹旧文件
May 10 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 #Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 #Python
Python实现的径向基(RBF)神经网络示例
Feb 06 #Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 #Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 #Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 #Python
Python实现matplotlib显示中文的方法详解
Feb 06 #Python
You might like
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
有关PHP中MVC的开发经验分享
2012/05/17 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
.NET方向面试题
2014/11/20 面试题
学生会招新策划书
2014/02/14 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
处级干部考察材料
2014/12/24 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
高中美术教学反思
2016/02/17 职场文书