火车票抢票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中处理字符串的相关的len()方法的使用简介
May 19 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
Python偏函数实现原理及应用
Nov 20 Python
python 实时调取摄像头的示例代码
Nov 25 Python
总结Pyinstaller打包的高级用法
Jun 28 Python
Python编程根据字典列表相同键的值进行合并
Oct 05 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php多文件上传下载示例分享
2014/02/20 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
php统计数组元素个数的方法
2015/07/02 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
javascript动画浅析
2012/08/30 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
从0开始学Vue
2016/10/27 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
vue.js实现双击放大预览功能
2020/06/23 Javascript
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
Python3 修改默认环境的方法
2019/02/16 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
python多进程并行代码实例
2019/09/30 Python
python 读取二进制 显示图片案例
2020/04/24 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
五四青年节的活动方案
2014/08/20 职场文书
团代会开幕词
2015/01/28 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
mysql查询结果实现多列拼接查询
2022/04/03 MySQL