使用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 25 Python
Python 中的with关键字使用详解
Sep 11 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
python技能之数据导出excel的实例代码
Aug 11 Python
Python中input与raw_input 之间的比较
Aug 20 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
python interpolate插值实例
Jul 06 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
May 21 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
文件上传的实现
2006/10/09 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
组合算法的PHP解答方法
2012/02/04 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
php中使用url传递数组的方法
2015/02/11 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
php多线程并发实现方法
2016/09/30 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
Python中用Decorator来简化元编程的教程
2015/04/13 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
精选奢华:THE LIST
2019/09/05 全球购物
存储过程和函数的区别
2013/05/28 面试题
外贸英语专业求职信范文
2013/12/25 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
vue 给数组添加新对象并赋值
2022/04/20 Vue.js
mysql幻读详解实例以及解决办法
2022/06/16 MySQL