用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登录pop3邮件服务器接收邮件的方法
Apr 30 Python
Python实现把json格式转换成文本或sql文件
Jul 10 Python
python编程线性回归代码示例
Dec 07 Python
python实现批量按比例缩放图片效果
Mar 30 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
Django 实现购物车功能的示例代码
Oct 08 Python
Python神奇的内置函数locals的实例讲解
Feb 22 Python
Python类的继承、多态及获取对象信息操作详解
Feb 28 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
Django实现后台上传并显示图片功能
May 29 Python
python能做哪方面的工作
Jun 15 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连接函数implode与分割explode的深入解析
2013/06/26 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
JavaScript多线程详解
2015/08/12 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python中对list去重的多种方法
2014/09/18 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
毕业生自荐书
2014/02/03 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
讲解员培训方案
2014/05/04 职场文书
安全生产宣传标语
2014/06/06 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
js前端图片加载异常兜底方案
2022/06/21 Javascript