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基础教程之循环介绍
Aug 29 Python
详解Python2.x中对Unicode编码的使用
Apr 03 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
python递归计算N!的方法
May 05 Python
Python中zfill()方法的使用教程
May 20 Python
浅谈Python中的私有变量
Feb 28 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
python调用其他文件函数或类的示例
Jul 16 Python
python保存log日志,实现用log日志画图
Dec 24 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
如何用用Python将地址标记在地图上
Feb 07 Python
Python运算符+与+=的方法实例
Feb 18 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
用缓存实现静态页面的测试
2006/12/06 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
javascript实现拖放效果
2015/12/16 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
Python编程之变量赋值操作实例分析
2017/07/24 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
python web框架 django wsgi原理解析
2019/08/20 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
办公室经理岗位职责
2014/01/01 职场文书
法律顾问服务方案
2014/05/15 职场文书
禁止酒驾标语
2014/06/25 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python