火车票抢票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易忽视知识点小结
May 25 Python
python实现web方式logview的方法
Aug 10 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
python实现周期方波信号频谱图
Jul 21 Python
python实现飞机大战微信小游戏
Mar 21 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python定义类的简单用法
Jul 24 Python
Python 列表推导式需要注意的地方
Oct 23 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
Python制作春联的示例代码
Jan 22 Python
Python中time与datetime模块使用方法详解
Mar 31 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
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
js数组去重的hash方法
2016/12/22 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python struct模块解析
2014/06/12 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
保险专业自荐信范文
2014/02/20 职场文书
生产操作工岗位职责
2014/09/16 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android