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检查指定文件是否存在的方法
Jul 06 Python
python 默认参数问题的陷阱
Feb 29 Python
简单的python协同过滤程序实例代码
Jan 31 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python动态语言与鸭子类型详解
Jul 01 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
Python实现弹球小游戏
Aug 01 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 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树的代码,可以嵌套任意层
2006/10/09 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
网站上面有这种切换效果
2006/06/26 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
原生js实现购物车
2020/09/23 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
详解python中的json和字典dict
2018/06/22 Python
Django CBV类的用法详解
2019/07/26 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
西部世纪面试题
2014/12/05 面试题
项目经理聘任书
2014/03/29 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书