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模拟鼠标拖动操作的方法
Mar 11 Python
在Python中使用Mako模版库的简单教程
Apr 08 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
python中requests库session对象的妙用详解
Oct 30 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
基于python if 判断选择结构的实例详解
May 06 Python
python实现单链表的方法示例
Sep 03 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 Python
python matplotlib绘制三维图的示例
Sep 24 Python
Python 中Operator模块的使用
Jan 30 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php 常用的系统函数
2017/02/07 PHP
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
NestJs 静态目录配置详解
2019/03/12 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
js实现车辆管理系统
2020/08/26 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
python生成随机验证码(中文验证码)示例
2014/04/03 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python函数装饰器用法实例详解
2015/06/04 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python os模块简单应用示例
2019/05/23 Python
详解Python文件修改的两种方式
2019/08/22 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
软件缺陷的分类都有哪些
2014/08/22 面试题
总经理年会致辞
2015/07/29 职场文书