用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编写一个国际象棋AI程序
Nov 28 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
Python 查找字符在字符串中的位置实例
May 02 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
详解Python中下划线的5种含义
Jul 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下打开URL地址的几种方法小结
2010/05/16 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python代码编写计算器小程序
2020/03/30 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
台湾旅游网站:灿星旅游
2018/10/11 全球购物
司机检讨书
2014/02/13 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js