火车票抢票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 list转dict示例分享
Jan 28 Python
在Python中使用列表生成式的教程
Apr 27 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
python超简单解决约瑟夫环问题
May 12 Python
Python中import机制详解
Nov 14 Python
Scrapy框架使用的基本知识
Oct 21 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
js URL参数的拼接方法比较
2012/02/15 Javascript
js document.write()使用介绍
2014/02/21 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
如何编写jquery插件
2017/03/29 jQuery
js实现京东轮播图效果
2017/06/30 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
详解在Python程序中自定义异常的方法
2015/10/16 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
浅析使用Python操作文件
2017/07/31 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
Python使用gRPC传输协议教程
2018/10/16 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
文明寄语大全
2014/04/11 职场文书
银行竞聘报告范文
2014/11/06 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
用python开发一款操作MySQL的小工具
2021/05/12 Python