火车票抢票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 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 Python
Python字符串对象实现原理详解
Jul 01 Python
python基于递归解决背包问题详解
Jul 03 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Pycharm如何自动生成头文件注释
Nov 14 Python
python list的index()和find()的实现
Nov 16 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
php实现rc4加密算法代码
2012/04/25 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python 爬取微信文章
2016/01/30 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python简单商城购物车实例代码
2018/03/15 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python os模块在系统管理中的应用
2020/06/22 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
公司感恩节活动策划书
2014/10/11 职场文书
80后婚前协议书范本
2014/10/24 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
神州牡丹园的导游词
2019/11/20 职场文书