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 相关文章推荐
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
Python基础知识_浅谈用户交互
May 31 Python
Python的语言类型(详解)
Jun 24 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
python实现QQ空间自动点赞功能
Apr 09 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
pycharm快捷键汇总
Feb 14 Python
Python pip install如何修改默认下载路径
Apr 29 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Django-simple-captcha验证码包使用方法详解
Nov 28 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
python 实现图片特效处理
Apr 03 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/21 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
Python合并多个Excel数据的方法
2018/07/16 Python
python实现批处理文件
2020/07/28 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
写自荐信的注意事项
2014/03/09 职场文书
期末学生评语大全
2014/04/24 职场文书
小学综合实践活动总结
2014/07/07 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
项目合作意向书
2015/05/08 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
python实现简单区块链结构
2021/04/25 Python