用Python抢火车票的简单小程序实现解析


Posted in Python onAugust 14, 2019

利用Python制作自动抢火车票小程序,过年再也不要担心没票了!

前言

每次过年很多人都会因为抢不到火车票而回不了家,所以小编利用Python写了一个自动抢火车票的工具,希望大家能抢到火车票,回家过个好年!

我本来想自己写一个练练手的,但是转眼一想,Python 本身最大的优势是什么,不就是有很多牛逼的人已经造好轮子了吗?你只需要知道这些轮子并会使用就行了,这样会节省你大量的精力和时间,而且站在巨人的肩膀上,会看得更远。

于是我在 github 上一搜索,果然有不少抢票程序,有的是 Python2,有的是 Python3,按 start 数据排序,经过亲自使用和对比,我选择了一个相对较好用的程序,并稍加以改进和完善。

话不多说,直接上代码:

'''
在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,934109170
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容。
'''
 
@@ -0,0 +1,124 @@
# -*- coding: utf-8 -*-
"""
@author: liuyw
"""
from splinter.browser import Browser
from time import sleep
import traceback
import time, sys
 
class huoche(object):
 driver_name = ''
 executable_path = ''
 #用户名,密码
 username = u"xxx"
 passwd = u"xxx"
 # cookies值得自己去找, 下面两个分别是沈阳, 哈尔滨
 starts = u"%u6C88%u9633%2CSYT"
 ends = u"%u54C8%u5C14%u6EE8%2CHBB"
 
 # 时间格式2018-01-19
 dtime = u"2018-01-19"
 # 车次,选择第几趟,0则从上之下依次点击
 order = 0
 ###乘客名
 users = [u"xxx",u"xxx"]
 ##席位
 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 = 'D:/chromedriver'
 
 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)
  print(u"等待验证码,自行输入...")
  while True:
   if self.driver.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.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)
 
if __name__ == '__main__':
 huoche = huoche()
 huoche.start()

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

Python 相关文章推荐
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
pymongo中聚合查询的使用方法
Mar 22 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
使用 Python 处理3万多条数据只要几秒钟
Jan 19 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
jupyter 导入csv文件方式
Apr 21 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 Python
分享Python获取本机IP地址的几种方法
Mar 17 Python
Python定时任务随机时间执行的实现方法
Aug 14 #Python
查看Python依赖包及其版本号信息的方法
Aug 13 #Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 #Python
Python编写带选项的命令行程序方法
Aug 13 #Python
使用python模拟命令行终端的示例
Aug 13 #Python
在macOS上搭建python环境的实现方法
Aug 13 #Python
解决Mac下使用python的坑
Aug 13 #Python
You might like
php 正则匹配函数体
2009/08/25 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
用jquery来定位
2007/02/20 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
js获取class的所有元素
2013/03/28 Javascript
javascript arguments使用示例
2014/12/16 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
房地产营销策划方案
2014/02/08 职场文书
2014年征兵标语
2014/06/20 职场文书
仲裁协议书
2014/09/26 职场文书
大学生个人学年总结
2015/02/15 职场文书
产品质量保证书范本
2015/02/27 职场文书
北大自主招生自荐信
2015/03/04 职场文书
自主招生专家推荐信
2015/03/26 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
城南旧事电影观后感
2015/06/16 职场文书
解析原生JS getComputedStyle
2021/05/25 Javascript
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
Java异常体系非正常停止和分类
2022/06/14 Java/Android