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的randrange()方法使用教程
May 15 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
python框架中flask知识点总结
Aug 17 Python
python使用folium库绘制地图点击框
Sep 21 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
浅谈Python中的模块
Jun 10 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
通过案例解析python鸭子类型相关原理
Oct 10 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遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
PHP积分兑换接口实例
2015/02/09 PHP
php技巧小结【推荐】
2017/01/19 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
Js中async/await的执行顺序详解
2017/09/22 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
ES6 十大特性简介
2020/12/09 Javascript
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
django 常用orm操作详解
2017/09/13 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
Django 开发环境配置过程详解
2019/07/18 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
windows下python安装pip方法详解
2020/02/10 Python
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
申报职称专业技术个人的自我评价
2013/12/12 职场文书
仓库理货员岗位职责
2013/12/18 职场文书
委托书如何写
2014/08/30 职场文书
企业年检委托书范本
2014/10/14 职场文书
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server