转载自:博客

对于某些网站登录的时候,往往需要输入验证码才能实现登录。如果要爬虫这类网站,往往总会比这个验证码导致无法爬取数据。以下介绍一种比较折中的方法,也是比较可行的方法: 
实现思想: 
1、通过截图获取验证码图片,为什么要截图,有的人会说,可以通过验证码图片的链接爬取下来,再用OCR识别就可以了,理论上这个方法是可行的,但是当你用这方法的时候,会发觉下载的图片和你实际页面的图片里面的内容是不一样的。 
2、截图图片后,通过OCR识别,返回验证码内容,完成登录。

代码:

#保存图片,通过显示器xy坐标,这里值得注意的是,如果每个显示器的分辨率是不一样的,(332,415,385,440)这个坐标会随时改动。
from PIL import ImageGrab
addr='E:\\OCR\\bb.png'
im = ImageGrab.grab((332,415,385,440))
im.save(addr,'png')

OCR识别,尽管上OCR识别有一定的准确率,但这个是可以通过ocr开发提高识别准确率的。

import pytesser3
print (pytesser3.image_file_to_string('bb.png'))

运行: 
下载图片: 

OCR识别: 

定义一个简单登录方法:

from PIL import ImageGrab
import pytesser3
from selenium import webdriver def loginSys(loginName,password):
driver=webdriver.Ie()
driver.get(url)
driver.implicitly_wait(60)
LoginTitle=driver.title while 1:
result=driver.title
if LoginTitle==result:
#截图
addr='E:\\OCR\\bb.png'
im = ImageGrab.grab((332,415,385,440))
im.save(addr,'png')
#OCR
Code=pytesser3.image_file_to_string('bb.png')
print (pytesser3.image_file_to_string('bb.png'))
#自动登录,find_element_by_id自行修改
driver.switch_to.frame('loginFormFrame')
driver.find_element_by_id('id_loginName').send_keys(loginName)
driver.find_element_by_id('id_password').send_keys(password)
driver.find_element_by_id('id_certCode').send_keys(Code)
driver.implicitly_wait(10)
driver.find_element_by_xpath('//img[@onclick="doLogin();"]').click()
driver.implicitly_wait(10)
driver.switch_to.default_content()
else:
break
#cookies传递,用于request爬取数据
cook=driver.get_cookies()
cookies[cook[0]['name']]=cook[0]['value']

解释:这里用了selenium做一个自动化登录的,这里会有疑问,为何不用requests,或者scrapy直接做后台登录。 
原因如下:首先我们找到登录 

这是一张图片,而且图片触发是一个js,再看js 
js代码很长,大部分都是做检测功能。 
 
如图所示,可以看到,这个登录是用get方法实现的,但是str是做了加密处理。 
我用过python的Base64解密,但解密出来的结果不一样。 
所以只能用到上述的方法。

【转】Python OCR识别图片验证码的更多相关文章

  1. python+selenium识别图片验证码

    import timeimport pytesseractfrom PIL import Image, ImageEnhancefrom selenium import webdriver url = ...

  2. python 识别图片验证码报IOError

    说一下困扰了我一周的问题:识别图片验证码 本来我按照安装步骤(http://www.cnblogs.com/yeayee/p/4955506.html?utm_source=tuicool&u ...

  3. Python 实现简单图片验证码登录

    朋友说公司要在测试环境做接口测试,登录时需要传入正确的图片的验证码,本着懒省事的原则,推荐他把测试环境的图片验证码写死,我们公司也是这么做的^_^.劝说无果/(ㄒoㄒ)/~~,只能通过 OCR 技术来 ...

  4. Python - WebDriver 识别登录验证码

    Python - WebDriver 识别登录验证码 没什么可说的直接上代码! #-*-coding:utf-8-*- # Time:2017/9/29 7:16 # Author:YangYangJ ...

  5. 【java+selenium3】Tesseract-OCR识别图片验证码 (十六)

    [java+selenium+Tesseract-OCR(图片识别)+AutoIt(windows窗口识别)]完成自动化图片验证码识别! 一.AutoIt(windows窗口识别)参考:https:/ ...

  6. python爬虫20 | 小帅b教你如何使用python识别图片验证码

    当你在爬取某些网站的时候 对于你的一些频繁请求 对方会阻碍你 常见的方式就是使用验证码 验证码的主要功能 就是区分你是人还是鬼(机器人) 人 想法设法的搞一些手段来对付技术 而 技术又能对付人们的想法 ...

  7. 【python】带图片验证码的登录自动化实战

    近期在跟进新项目的时候,整体的业务线非常之长,会一直重复登录退出不同账号的这个流程,所以想从登录开始实现部分的自动化.因为是B/S的架构,所以采用的是selenium的框架来实现.大致实现步骤如下: ...

  8. 使用burp插件captcha-killer识别图片验证码

    0x01 开发背景 说起对存在验证码的登录表单进行爆破,大部分人都会想到PKav HTTP Fuzzer,这款工具在前些年确实给我们带来了不少便利.反观burp一直没有一个高度自定义通杀大部分图片验证 ...

  9. [Java] 识别图片验证码

    现在大多数网站都采用了验证码来防止暴力破解或恶意提交.但验证码真的就很安全吗?真的就不能被机器识别?? 我先讲讲我是怎么实现站外提交留言到一个网站的程序. 这个网站的留言版大致如下: 我一看这种简单的 ...

随机推荐

  1. Wifi密码破解实战

    原文链接地址:http://www.freebuf.com/articles/wireless/127261.html https://www.baidu.com/?tn=98012088_4_dg& ...

  2. docker基础学习

    docker的定义: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机 ...

  3. 题解【bzoj2301 [HAOI2011]Problem b】

    Description 求有多少个数对 \((x,y)\) ,满足$ a \leq x \leq b$ ,\(c \leq y \leq d\) ,且 \(\gcd(x,y) = k\),\(\gcd ...

  4. crontab 自动执行脚本

    crontab -e ================>自动执行某脚本!!!!!!! 1001 ls 1002 cd /home/wwwroot/default/ 1003 ls 1004 cr ...

  5. Windows 安装 RabbitMQ

    RabbitMQ概述 RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.Ra ...

  6. 2015/11/1用Python写游戏,pygame入门(1):pygame的安装

    这两天学习数据结构和算法,有时感觉并不如直接做项目来的有趣.刚刚学完python的基本使用,现在刚好趁热打铁做个小项目. 由于本人一直很想制作一款游戏,就想使用Python制作一个基础的游戏.搜了一下 ...

  7. 关于jQuery UI 使用心得及技巧

    1 jQuery UI 有时你仅仅是为了实现一个渐变的动画效果而不得不把javascrip 重新学习一遍然后书写大量代码.直到jQuery的出现,让开发人员从一大堆繁琐的js代码中解脱,取而代之几行j ...

  8. DHTML中window的使用

    window对象是对浏览器窗口进行操作的对象.以下列出一些常用的对象(三级为对象的方法.属性) |-navigator:是对浏览器信息进行操作的对象 |-history:包含用户浏览过的url信息 | ...

  9. [POJ 2559]Largest Rectangle in a Histogram 题解(单调栈)

    [POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequen ...

  10. flex图片布局

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>f ...