python爬虫解决验证码的思路及示例


Posted in Python onAugust 01, 2019

如果直接从生成验证码的页面把验证码下载到本地后识别,再构造表单数据发送的话,会有一个验证码同步的问题,即请求了两次验证码,而识别出来的验证码并不是实际需要发送的验证码。有如下几种方法解决。

法1:

用session:

mysession = requests.Session()
login_url = 'http://xxx.com'
checkcode_url='http://yyy.com'
html = mysession.get(login_url,timeout=60*4)
#....balabala解析操作....
checkcode = mysession.get(checkcode_url,timeout=60*4)
with open('checkcode.png','wb') as f:
  f.write(checkcode.content)
 
#接下来balabala对图像操作,可以用python的相关库(识别率低,教务网的验证码都够呛),也可以用云速等第三方验证码识别网站提供的有偿服务(识别度较高)
 
#再接下来构造表单数据balabala

法2:

用cookie:

#绑定cookie
checkcode_url='http://yyy.com'
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
 
#先读取验证码的url
picture = opener.open(checkcode_url).read()
 
#balabala图像处理
 
# 生成post数据 
data = urllib.urlencode(postData)
# 构造request请求
request = urllib2.Request(PostUrl, data, headers)
# 利用之前存有cookie的opener登录页面
try:
  response = opener.open(request)
  result = response.read()
except urllib2.HTTPError, e:
  print e.code

法3:

selenium+手动构造cookie: 该方法无需识别验证码,本人尚未尝试。

webdriver 操作 cookie 的方法有:

  • get_cookies() 获得所有 cookie 信息
  • get_cookie(name) 返回特定 name 有 cookie 信息
  • add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
  • delete_cookie(name) 删除特定(部分)的 cookie 信息
  • delete_all_cookies() 删除所有 cookie 信息
....
#第一次访问 xxx 网站
driver.get("http://xxx.com")
#将用户名密码写入浏览器 cookie
driver.add_cookie({'name':'username','value':'username'})
driver.add_cookie({'name':'password','value':'password'})
#再次访问 xxx 网站,将会自动登录
driver.get("http://xxx.com")
time.sleep(5)
....
driver.quit()

这种方法难点在于确定该网站是用cookie中的什么key值来表示“用户名”和“密码”的。而且好像有些cookie是加密过的。可以先用get_cookies()进行观察。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的百度站长自动URL提交小工具
Jun 27 Python
python继承和抽象类的实现方法
Jan 14 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
通过pykafka接收Kafka消息队列的方法
Dec 27 Python
利用Python+阿里云实现DDNS动态域名解析的方法
Apr 01 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
Python 文件数据读写的具体实现
Jan 24 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
Django多数据库的实现过程详解
Aug 01 #Python
Python解决pip install时出现的Could not fetch URL问题
Aug 01 #Python
numpy.meshgrid()理解(小结)
Aug 01 #Python
Python-接口开发入门解析
Aug 01 #Python
Python列表(list)所有元素的同一操作解析
Aug 01 #Python
详解numpy.meshgrid()方法使用
Aug 01 #Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 #Python
You might like
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
php数据访问之增删改查操作
2016/05/09 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
PHP如何与mysql建立链接
2013/05/05 面试题
工程测量与监理专业应届生求职信
2013/11/27 职场文书
数控个人求职信范文
2014/02/03 职场文书
安全生产汇报材料
2014/02/17 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
婚前协议书范本
2014/04/15 职场文书
大国崛起日本观后感
2015/06/02 职场文书
班级联欢会主持词
2015/07/03 职场文书