100行Python代码实现自动抢火车票(附源码)


Posted in Python onJanuary 11, 2018

前言

又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool。下面话不多说了,来一起看看详细的介绍吧。

先准备好:

  • 12306网站用户名和密码
  • chrome浏览器及下载chromedriver
  • 下载Python代码,来自网络整理 [点击下载 |  本地下载 ]

代码用的Python+Splinter开发,Splinter是一个使用Python开发的开源Web应用测试工具,它可以帮你实现自动浏览站点和与其进行交互。

Splinter官网:http://splinter.readthedocs.io/en/latest/。

Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL。然后你所开发的模拟的任何行为,都会自动完成,你只需要坐在电脑面前,像看电影一样看着屏幕上各种动作自动完成然后收集结果即可。

了解原理:

找到相应URL,找到控件模拟登录、查询、订票操作。关键是找到控件名称,难点是起始地不是直接输入的页面值,需要在cookie中查出。

12306查询URL: https://kyfw.12306.cn/otn/leftTicket/init

12306登录URL: https://kyfw.12306.cn/otn/login/init

我的12306URL: https://kyfw.12306.cn/otn/index/initMy12306

购票确认URL: https://kyfw.12306.cn/otn/confirmPassenger/initDc

Python代码打开URL,找到控件填充值:

def login(self):
  self.driver.visit(self.login_url)
  # 填充用户名
  self.driver.fill("loginUserDTO.user_name", self.username)
  # 填充密码
  self.driver.fill("userDTO.password", self.passwd)
  print u"等待验证码,自行输入..."

100行Python代码实现自动抢火车票(附源码)

找到用户名密码控件名

100行Python代码实现自动抢火车票(附源码)

找到起始地控件名

确定起始地的值,方法Chrome浏览器中的“检查”功能(按F12),Network ---> Cookies中找到:

100行Python代码实现自动抢火车票(附源码)

cookie中起始地的值

拷贝起始地的cookie值,我把几个常用的城市拷出来,放到了字典中:

cities= {'成都':'%u6210%u90FD%2CCDW',
'重庆':'%u91CD%u5E86%2CCQW',
'北京':'%u5317%u4EAC%2CBJP',
'广州':'%u5E7F%u5DDE%2CGZQ',
'杭州':'%u676D%u5DDE%2CHZH',
'宜昌':'%u5B9C%u660C%2CYCN',
'郑州':'%u90D1%u5DDE%2CZZF',
'深圳':'%u6DF1%u5733%2CSZQ',
'西安':'%u897F%u5B89%2CXAY',
'大连':'%u5927%u8FDE%2CDLT',
'武汉':'%u6B66%u6C49%2CWHN',
'上海':'%u4E0A%u6D77%2CSHH',
'南京':'%u5357%u4EAC%2CNJH',
'合肥':'%u5408%u80A5%2CHFH'}

查询车票代码:

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.find_by_text(u"查询").click()

其实,你只需要运行代码:

python tickets.py 上海 广州 2018-02-05

当然,还需要手动点一下的还是万恶的12306验证码,抢到票后确认支付就行啦。

100行Python代码实现自动抢火车票(附源码)抢票进行中

100行Python代码实现自动抢火车票(附源码)

抢票成功!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python原始字符串(raw strings)用法实例
Oct 13 Python
Python判断两个对象相等的原理
Dec 12 Python
在python中实现强制关闭线程的示例
Jan 22 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
基于python实现从尾到头打印链表
Nov 02 Python
python绘制无向图度分布曲线示例
Nov 22 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 Python
python实现外卖信息管理系统
Jan 11 #Python
Python实现学生成绩管理系统
Apr 05 #Python
名片管理系统python版
Jan 11 #Python
Python学生成绩管理系统简洁版
Apr 05 #Python
Python实现学校管理系统
Jan 11 #Python
Python实现GUI学生信息管理系统
Apr 05 #Python
使用python 爬虫抓站的一些技巧总结
Jan 10 #Python
You might like
mysql中存储过程、函数的一些问题
2007/02/14 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
PHP实现百度人脸识别
2019/05/06 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
python3编写C/S网络程序实例教程
2014/08/25 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
对python 命令的-u参数详解
2018/12/03 Python
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
个人担保书格式范文
2014/05/12 职场文书
五四青年节演讲稿
2014/05/26 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
linux目录管理方法介绍
2022/06/01 Servers