火车票抢票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编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
python更改已存在excel文件的方法
May 03 Python
python使用scrapy发送post请求的坑
Sep 04 Python
自学python的建议和周期预算
Jan 30 Python
Python获取时间戳代码实例
Sep 24 Python
python编写计算器功能
Oct 25 Python
python pyenv多版本管理工具的使用
Dec 23 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
风格模板初级不完全修改教程
2006/10/09 PHP
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
python添加模块搜索路径方法
2017/09/11 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
python开发入门——列表生成式
2020/09/03 Python
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
2014年两会学习心得范例
2014/03/17 职场文书
2014年村官工作总结
2014/11/24 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
我的收音机情缘
2022/04/05 无线电
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python
nginx lua 操作 mysql
2022/05/15 Servers
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers