火车票抢票python代码公开揭秘!


Posted in Python onMarch 08, 2018

市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单。下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事。

火车票抢票python代码公开揭秘!

该代码仅供参考,主要用于大家沟通交流,禁止用于商业用途。

具体代码如下,可以修改成自己的12306用户名账号:

# -*- coding: utf-8 -*-
from splinter.browser import Browser
from time import sleep
import traceback
import time, sys

class huoche(object):
 """docstring for huoche"""
 driver_name=''
 executable_path=''
 username = u"xxx@qq.com"
 passwd = u"xxxx"
 starts = u"%u4E0A%u6D77%2CSHH"
 ends = u"%u592A%u539F%2CTYV"
 dtime = u"2018-01-19"
 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='/usr/local/bin/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"购票页面开始..."

  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"循环点击查询..." % 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"循环点击查询..." % 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 相关文章推荐
用C++封装MySQL的API的教程
May 06 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
Python操作qml对象过程详解
Sep 26 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 #Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 #Python
TensorFlow模型保存/载入的两种方法
Mar 08 #Python
python2.7 json 转换日期的处理的示例
Mar 07 #Python
教你用Python创建微信聊天机器人
Mar 31 #Python
为什么入门大数据选择Python而不是Java?
Mar 07 #Python
详解Python中如何写控制台进度条的整理
Mar 07 #Python
You might like
使用PHP实现Mysql读写分离
2013/06/28 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
Python socket实现简单聊天室
2018/04/01 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
python selenium firefox使用详解
2019/02/26 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
学生感冒英文请假条
2014/02/04 职场文书
新闻编辑求职信
2014/07/13 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
供应商食品安全承诺书
2015/04/29 职场文书