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查询阿里巴巴关键字排名的方法
Jul 08 Python
常见python正则用法的简单实例
Jun 21 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
python递归实现快速排序
Aug 18 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Django  ORM 练习题及答案
Jul 19 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
python如何爬取网页中的文字
Jul 28 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
python+opencv实现目标跟踪过程
Jun 21 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
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP 快速排序算法详解
2014/11/10 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
jQuery源码分析之Event事件分析
2010/06/07 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
python图像处理之镜像实现方法
2015/05/30 Python
Python ftp上传文件
2016/02/13 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
python实现翻译word表格小程序
2020/02/27 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
flask框架中的cookie和session使用
2021/01/31 Python
python实现银行账户系统
2021/02/22 Python
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
毕业生个人求职的自我评价
2013/10/28 职场文书
关于圣诞节的广播稿
2014/01/26 职场文书
运动会开幕式解说词
2014/02/05 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
nginx优化的六点方法
2021/03/31 Servers