火车票抢票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 相关文章推荐
使用python开发vim插件及心得分享
Nov 04 Python
Python中字符串的修改及传参详解
Nov 30 Python
Python 模拟购物车的实例讲解
Sep 11 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Windows下python3.6.4安装教程
Jul 31 Python
python web框架 django wsgi原理解析
Aug 20 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
Python内置加密模块用法解析
Nov 25 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
什么是python的必选参数
Jun 21 Python
Python实现微信表情包炸群功能
Jan 28 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生成缩略图的代码
2011/01/12 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
Redis构建分布式锁
2017/03/28 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
javascript function、指针及内置对象
2009/02/19 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
教师试用期自我鉴定
2014/02/12 职场文书
申论倡议书范文
2014/05/13 职场文书
建筑横幅标语
2014/10/09 职场文书
先进工作者个人总结
2015/02/15 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
DSP接收机前端设想
2022/04/05 无线电