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中使用dict和set方法的教程
Apr 27 Python
python九九乘法表的实例
Sep 26 Python
PyQt5每天必学之组合框
Apr 20 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
Python中的特殊方法以及应用详解
Sep 20 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 远程图片保存到本地的函数类
2008/12/08 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
Django admin美化插件suit使用示例
2017/12/12 Python
Python实现感知机(PLA)算法
2017/12/20 Python
python版本的仿windows计划任务工具
2018/04/30 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
基于python实现查询ip地址来源
2020/06/02 Python
python和JavaScript哪个容易上手
2020/06/23 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
写给老婆的检讨书
2014/02/21 职场文书
小学一年级学生评语
2014/04/22 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
先进单位事迹材料
2014/12/25 职场文书
成事在人观后感
2015/06/16 职场文书
休学证明范本
2015/06/19 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
Docker官方工具docker-registry案例演示
2022/04/13 Servers