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线程的两种编程方式
Apr 14 Python
Python中的rjust()方法使用详解
May 19 Python
python difflib模块示例讲解
Sep 13 Python
Python实现程序判断季节的代码示例
Jan 28 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
Python类class参数self原理解析
Nov 19 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
python re模块常见用法例举
Mar 01 Python
Python+Tkinter打造签名设计工具
Apr 01 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安全配置方法
2007/06/16 PHP
9个PHP开发常用功能函数小结
2011/07/15 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
jquery弹出层类代码分享
2013/12/27 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python 12306抢火车票脚本
2018/02/07 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
Python魔法方法详解
2019/02/13 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
什么是URL
2015/12/13 面试题
高三自我鉴定范文
2013/10/19 职场文书
创先争优活动承诺书
2014/08/30 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
python 爬取天气网卫星图片
2021/06/07 Python
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS