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通过socket查询whois的方法
Jul 18 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
简单了解OpenCV是个什么东西
Nov 10 Python
Python实现修改IE注册表功能示例
May 10 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
Python使用while循环花式打印乘法表
Jan 28 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
windows支持哪个版本的python
Jul 03 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
jupyter notebook快速入门及使用详解
Nov 13 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
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
2014过年倒计时示例
2014/01/31 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
js实现无缝轮播图
2020/03/09 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
Python单链表简单实现代码
2016/04/27 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python圣诞树编写实例详解
2020/02/13 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
python切割图片的示例
2020/11/12 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
运行时异常与一般异常有何异同?
2014/01/05 面试题
工程造价专业大专生求职信
2013/10/06 职场文书
房屋产权证明书
2015/06/19 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫