火车票抢票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挑选文件夹里宽大于300图片的方法
Mar 05 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
python读取二进制mnist实例详解
May 31 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
详解Python绘图Turtle库
Oct 12 Python
pytorch中的transforms模块实例详解
Dec 31 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
python怎么判断素数
Jul 01 Python
Django如何创作一个简单的最小程序
May 12 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/12/06 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
python编写暴力破解FTP密码小工具
2014/11/19 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
如何使用python爬取csdn博客访问量
2016/02/14 Python
python数值基础知识浅析
2019/11/19 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
extern在函数声明中是什么意思
2014/01/19 面试题
护士求职自荐信范文
2014/03/19 职场文书
感恩节活动策划方案
2014/05/16 职场文书
公司承诺书范文
2014/05/19 职场文书
设备售后服务承诺书
2014/05/30 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
教师反邪教心得体会
2016/01/15 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
python本地文件服务器实例教程
2021/05/02 Python