用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的一些用法分享
Oct 07 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 Python
python selenium firefox使用详解
Feb 26 Python
python celery分布式任务队列的使用详解
Jul 08 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
python和JavaScript哪个容易上手
Jun 23 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
Python保存并浏览用户的历史记录
Apr 29 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中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
javascript常用的方法分享
2015/07/01 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
Vue 中axios配置实例详解
2018/07/27 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python中类的继承代码实例
2014/10/28 Python
python日志记录模块实例及改进
2017/02/12 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
通息工程毕业生自荐信
2013/10/16 职场文书
大专会计自我鉴定
2014/02/06 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
vue实现同时设置多个倒计时
2021/05/20 Vue.js
Pytorch可视化的几种实现方法
2021/06/10 Python