用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标准日志模块logging的使用方法
Nov 01 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
Python程序中设置HTTP代理
Nov 06 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
Python2与Python3的区别详解
Feb 09 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
Python爬虫基础之简单说一下scrapy的框架结构
Jun 26 Python
Python编程编写完善的命令行工具
Sep 15 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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桌面中心(一) 创建数据库
2007/03/11 PHP
PDO::errorInfo讲解
2019/01/28 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
Angular路由简单学习
2016/12/26 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
python 实现list或string按指定分段
2019/12/25 Python
Python函数调用追踪实现代码
2020/11/27 Python
Python项目打包成二进制的方法
2020/12/30 Python
python绘制高斯曲线
2021/02/19 Python
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
计算机工程学院个人求职信
2013/10/05 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
升旗仪式主持词
2014/03/19 职场文书
农村葬礼主持词
2014/03/31 职场文书
建筑投标担保书
2014/05/20 职场文书
本科毕业生自荐信
2014/05/26 职场文书
初中同学会活动方案
2014/08/22 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL