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 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
python在命令行下使用google翻译(带语音)
Jan 16 Python
python实现的登录和操作开心网脚本分享
Jul 09 Python
python正则表达式match和search用法实例
Mar 26 Python
常见的python正则用法实例讲解
Jun 21 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python字符串和常用数据结构知识总结
May 21 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
python cv2截取不规则区域图片实例
Dec 21 Python
keras中的卷积层&池化层的用法
May 22 Python
python集合的新增元素方法整理
Dec 07 Python
一篇文章带你搞懂Python类的相关知识
May 20 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
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python实现哈希表
2014/02/07 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
阿巴庭院:Abba Patio
2019/06/18 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
英文演讲稿
2014/05/15 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书