火车票抢票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的Django框架中显示对象子集的方法
Jul 21 Python
Python类属性的延迟计算
Oct 22 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
python读取LMDB中图像的方法
Jul 02 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 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 curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python ubplot使用方法解析
2020/01/10 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
办公室主任岗位职责
2013/11/08 职场文书
护士自我评价范文
2014/01/25 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
大学生党员自我评价范文
2014/04/09 职场文书
高一新生军训方案
2014/05/12 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
新年寄语2016
2015/08/17 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
python办公自动化之excel的操作
2021/05/23 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android