用python识别验证码

前言

经常大家在做自动化测试或者做网络爬虫的时候,都很容易遇到验证码。
今天,我们就简单的说下,怎么用python来处理验证码。
(注意:我所有的python相关的文章用的都是python3。)

准备工作

1、tesseract-ocr软件

Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。
数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生--2005年,Tesseract由美国内华达州信息技术研究所获得,并求诸于Google对Tesseract进行改进、消除Bug、优化工作。
总之,tesseract-ocr是一个做图形识别必须用到第一个软件,不仅可以处理验证码,也可以识别图片上的文字等等。

我已经把软件上传了我的网盘,大家可以直接下载,不需要安装,解压即可。
下载地址:
链接:https://pan.baidu.com/s/1bpMz3OV 密码:108a

2、Pytesseract包

Pytesseract是一个python的第三方的包,主要作用就是用来连接操作tesseract-ocr工具。
为我们用python来处理图形打好了基础。
可以使用pip工具直接安装。

3、Pillow包

python的图形处理库,用来处理调整图形的各种内容。
Pillow由PIL而来,所以该导入该库使用import PIL。
Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。
可以使用pip工具直接安装。

配置环境

第一步、把Tesseract-OCR添加到环境变量。

我们下载好Tesseract-OCR后,直接将其解压,然后把所在路径添加到环境变量中。
如图所示:


Tesseract路径.png

复制路径:D:\Program Files\Tesseract-OCR
添加到环境变量PATH中


环境变量.png

第二步、安装Pytesseract和Pilllow包

打开cmd,使用pip工具依次安装Pytesseract和Pilllow包
如图所示:


pytesseract.gif

第三步、检查是否安装成功

1、检查tesseract-ocr
打开cmd,输入tesseract


image.png

2、检查Pytesseract和Pillow包
在python里导入试试吧,没有报错,那就说明成功了。


image.png

OK!没问题,说明我们已经安装成功了,那我们就开始写代码了。

识别验证码

要识别验证码,那我们首先就要获取验证码。
我一般有两种常用的方式去获取验证码。
第一种是通过接口保存验证码。
第二种是通过截图保存验证码。
我们依次说明。

1、通过接口保存验证码并识别。

通过接口去获取的话,我们是需要借助requests这个包的。
这里我们主要讲识别验证码,requests我会在其他文章里详细的说明。

import requests
import pytesseract
from PIL import Image
'''
调用接口请求验证码,保存到本地,识别验证,检查识别的验证码对不对。
'''
# 获取图片的接口地址
url = hurl + "/file/getCaptcha1"
# headers需要的参数
headers = None
# 接口需要的参数
querystring = {"w": "70", "h": "29"}
# 发送请求
response = requests.request("GET", url, headers=headers, params=querystring, verify=False)
# 接口返回的数据以二进制的方式展示
img = response.content
# 选择保存的路径和图片格式
with open('F:\MyPython\TestCode\data\code.jpg', 'wb') as f:
    # 保存
    f.write(img)
# 用Image模块打开上一步保存的验证码
image = Image.open('F:\MyPython\TestCode\data\code.jpg')
# 识别验证码
optCode = pytesseract.image_to_string(image)
# 打印出验证码
print("验证码:", optCode)

2、通过截图保存验证码并识别。

要截图的话肯定需要界面,那么我们就需要借助selenium去操作了。
selenium这里也不讲,大家应该都会吧。

import pytesseract
from PIL import Image
from selenium import webdriver
'''
调用接口请求验证码,保存到本地,识别验证,检查识别的验证码对不对。
'''
driver = webdriver.Chrome()
打开有验证码的界面
driver.get("https://www.XXXX.com/login")
# 比较好理解、截图并保存到这个路径
driver.get_screenshot_as_file('F:/VScode/LoarRunner/Vcode/homepage.png')
# 打开刚刚保存的图片
im = Image.open('F:/VScode/LoarRunner/Vcode/homepage.png')
# 设置要裁剪的区域(验证码所在的区域)
box = (1214, 82, 1285, 111)
# 截图,生成只有验证码的图片
region = im.crop(box)
# 保存到本地路径
region.save("F:/VScode/LoarRunner/Vcode/image_code.jpg")
# 读取验证码图片
image = Image.open("F:/VScode/LoarRunner/Vcode/image_code.jpg")
# 开始识别验证码
optCode = pytesseract.image_to_string(image)
# 打印出验证码
print(optCode)

总结

简单的来说,识别图片,验证码,文字啊,都可以这样子操作。
但是验证码的处理远远没有这么简单。
毕竟啊,现在的验证码是越来越变态。
希望大家可以灵活应用图形处理方法。
可以尝试下识别照片上的文字什么的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,294评论 6 428
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,509评论 4 418
  • 原文链接: http://www.jianshu.com/p/9c6ae64a1bd7 GitHub 上有一个 A...
    李绍俊阅读 6,078评论 0 92
  • 前言 相信大家利用 Python 写的爬虫应该遇到过要输入验证码的尴尬局面,又或者写了个自动填充表单的小程序,结果...
    迦度蓝洛阅读 16,528评论 2 35
  • 1.为什么学习设计模式 对于设计模式,我们并不陌生。一谈起设计模式,脑海里马上就想到单例模式,委托模式,观察者模式...
    coder小鹏阅读 3,984评论 13 16