使用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控制台英汉汉英电子词典
Apr 23 Python
Python2中的raw_input() 与 input()
Jun 12 Python
Python排序算法实例代码
Aug 10 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
Django REST为文件属性输出完整URL的方法
Dec 18 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
学生信息管理系统python版
Oct 17 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
python的命名规则知识点总结
Oct 04 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
深入理解python协程
Jun 15 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
onpropertypchange
2006/07/01 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
python批量获取html内body内容的实例
2019/01/02 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
如何在python中执行另一个py文件
2020/04/30 Python
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
如何写一份好的自荐信
2014/01/02 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
Golang连接并操作MySQL
2022/04/14 MySQL
windows系统搭建WEB服务器详细教程
2022/08/05 Servers