使用Python神器对付12306变态验证码


Posted in Python onJanuary 05, 2016

临近春节,三水点靠木小编带领大家用Python抢火车票!

首先我们需要splinter

安装:

pip install splinter -i http://pypi.douban.com/simple ?trusted-host pypi.douban.com

然后还需要一个浏览器的驱动,当然用chrome啦

下载地址:

http://chromedriver.storage.googleapis.com/index.html?path=2.20/

根据下载的自己的电脑系统选择下载包,我的windows就用win32了

解压后直接放到C:WindowsSystem32目录下,你当然也可以给这个驱动程序弄个环境变量。

注意:我下的驱动版本是2.19的,根据自己需要下载相应版本,我的2.20版本有报错

首先简单的测试一下吧,推荐ipython代替python自带的交互界面

from splinter.browser import Browser
b = Browser(driver_name="chrome")
b.visit("http://www.baidu.com") ###注意不要去掉http://

然后牛刀小试一下吧,用百度搜索一些东西。比如splinter

在上面我们已经打开百度的网址了

然后我们输入一些像搜索的内容吧

使用Python神器对付12306变态验证码

由上可以发现,该输入框的name=wd,通过fill似乎只能通过name填充

官方说明: Fill the field identified by name with the content specified by value.

那就在输入框搜索splinter,当然也可以输入中文,但是最好指定Unicode编码,如u”我”

b.fill("wd","splinter")

有意思的事,你会发现你都不需要点击“百度一下”就到搜索页面了

但是,如果多次搜索,我们还是需要点击“百度一下”的

下面就不在带着大家找这些元素的id,value什么的了,通过chrome的F12找自己需要的吧

那么把点击栏find出来吧

我们发现,百度搜索栏的value=”百度一下”,id=”su”

所以把这个按钮提取出来

 button = b.find_by_value(u"百度一下")

或者

button = b.find_by_id(u"su")

怎么点击呢?简单如下

button.click()

这有什么用?

我们找找页面里有没有我想找的东西吧,比如找找有没有这个地址“splinter.cobrateam.info”

b.is_text_present("splinter.cobrateam.info")

如果该页面存在,则返回True,反之亦然

怎么退出呢?

b.quit()

好吧,上面就是参照官方文档写的一个简单的入门教程了,下面我们进入正题吧~~~

个人是觉得授人以鱼不如授人以渔的,所以我尽量讲解所有的内容,而非发个代码,让大家copy一下,然后不求甚解。

值得注意的是,我不会去说什么怎么破解验证码以及有什么漏洞可以利用什么的,抢过票的都知道,快一点是一点,而我要做的是就能将机器能做的交给机器做,比如点击,查询,选择等,所以希望必中的还是绕过此文吧。笔者水平也就这么一点点。

首先我们用ipython讲解一下思路

开始当然是导入啦。。

from splinter.browser import Browser
b = Browser(driver_name="chrome")
url = “https://kyfw.12306.cn/otn/leftTicket/init”
b = Browser(driver_name="chrome")
b.visit(url)

第一步手动登陆,能通过下面的代码填充表单,但是我跳不过验证码,暂时没有精力去研究那东西,多多见谅,所以还是等手动选择验证码的。

b.find_by_text(u"登录").click()
 b.fill("loginUserDTO.user_name","xxxx")
b.fill("userDTO.password","xxxx")

第二部选择出发地点日期等

通过cookies选择出发地点,日期及目的地

首先瞧瞧我们的cookies当然是没有的出发日期什么的

至于你的出发地点及目的地对于的cookies值是什么,就得靠自己去copy了,我帮不了

使用Python神器对付12306变态验证码

怎么有的这些值?

先将地点日期输进去查询一下,然后chrome按F12  找到这一部分即可

打开浏览器跳到这个页面当然是没有我们需要的信息的,比如下面这样

b.cookies.all()
{u'BIGipServerotn': u'1977155850.38945.0000',
 u'JSESSIONID': u'0A01D97598F459F751C4AE8518DBFB300DA7001B67',
 u'__NRF': u'95D48FC2E0E15920BFB61C7A330FF2AE',
 u'current_captcha_type': u'Z'}

然后我们需要添加出发地,这个得自己去查了,是简单的url加密

b.cookies.add({"_jc_save_fromStation":"%u4E0A%u6D77%2CSHH"})

添加出发日期

b.cookies.add({"_jc_save_fromDate":"2016-01-20"})

添加目的地

b.cookies.add({u'_jc_save_toStation':'%u6C38%u5DDE%2CAOQ'})

注:如果是修改的话,还是调用add方法,如果传入的字典key值已存在则替换

比如,将目的地改为其他地方xxxx,如下即可

b.cookies.add({u'_jc_save_toStation':'xxxxxx'})

以上内容给大家介绍了使用Python神器对付12306变态验证码,希望本文分享能够帮助到大家。

Python 相关文章推荐
Python命名空间详解
Aug 18 Python
python批量提交沙箱问题实例
Oct 08 Python
在Python中移动目录结构的方法
Jan 31 Python
简单学习Python time模块
Apr 29 Python
python实现数据库跨服务器迁移
Apr 12 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
Python 使用类写装饰器的小技巧
Sep 30 Python
对python 中class与变量的使用方法详解
Jun 26 Python
使用python+whoosh实现全文检索
Dec 09 Python
Python logging日志模块 配置文件方式
Jul 12 Python
Python之字典对象的几种创建方法
Sep 30 Python
python的html标准库
Apr 29 Python
Python聊天室实例程序分享
Jan 05 #Python
详解Python Socket网络编程
Jan 05 #Python
菜鸟使用python实现正则检测密码合法性
Jan 05 #Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 #Python
Python实现控制台进度条功能
Jan 04 #Python
python实现网站的模拟登录
Jan 04 #Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 #Python
You might like
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
javascript设计模式之解释器模式详解
2014/06/05 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
python处理xml文件的方法小结
2017/05/02 Python
python实现二分查找算法
2017/09/21 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
Python列表切片常用操作实例解析
2020/03/10 Python
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
学生党支部先进事迹
2014/02/04 职场文书
中药专业自荐信范文
2014/03/18 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
十佳青年事迹材料
2014/08/21 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers
java开发双人五子棋游戏
2022/05/06 Java/Android