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通过exifread模块获得图片exif信息的方法
Mar 16 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
python实现稀疏矩阵示例代码
Jun 09 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
Sanic框架安装与简单入门示例
Jul 16 Python
Django异步任务之Celery的基本使用
Mar 23 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
详解django中Template语言
Feb 22 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
python 检测nginx服务邮件报警的脚本
Dec 31 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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
swiper自定义分页器的样式
2020/09/14 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
Python入门篇之函数
2014/10/20 Python
Python中自定义函数的教程
2015/04/27 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
英文版餐饮运营管理求职信
2013/11/06 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
如何写早恋检讨书
2014/09/10 职场文书
公司离职证明范本
2014/10/17 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2016党员入党决心书
2015/09/22 职场文书