导航:首页 > 编程语言 > python读取验证码

python读取验证码

发布时间:2023-12-23 15:30:31

‘壹’ 如何利用python做简单的验证码识别

最近在折腾验证码识别。最终的脚本的识别率在92%左右,9000张验证码大概能识别出八千三四百张左右。好吧,其实是验证码太简单。下面就是要识别的验证码。

接下来对图片进行分割。遍历图片中所有像素点,计算每一列像素为0的点的个数(jd)。对于相邻两列,若其中一列jd=0,而另一列jd!=0,则可以认为这一列是验证码中字符边界,由此对验证码进行分割。这样分割能达到比较好的效果,分割后得到的字符图片几乎能与模板完全相同。

(Width,Height) = img2.size
pix2 = img2.load()
x0 = []
y0 = []for x in range(1,Width):
jd = 0
# print x
for y in range(1,Height): # print y
if pix2[x,y] == 0:
jd+=1
y0.append(jd) if jd > 0:
x0.append(x)#分别对各个字符边界进行判断,这里只举出一个 for a in range(1,Width): if (y0[a] != 0)&(y0[a+1] != 0):
sta1 = a+1

分割完成后,对于识别,目前有几种方法。可以遍历图片的每一个像素点,获取像素值,得到一个字符串,将该字符串与模板的字符串进行比较,计算汉明距离或者编辑距离(即两个字符串的差异度),可用Python-Levenshtein库来实现。

我采用的是比较特征向量来进行识别的。首先设定了4个竖直特征向量,分别计算第0、2、4、6列每一列像素值为0的点的个数,与模板进行比较,若小于阈值则认为该字符与模板相同。为了提高识别率,如果通过竖直特征向量未能识别成功,引入水平特征向量继续识别,原理与竖直特征向量相同。

另外,还可以通过局部特征进行识别。这对于加入了旋转干扰的验证码有很好效果。由于我写的脚本识别率已经达到了要求,所以并没有用到这个。

最后的结果是这样的:

最终在模板库只有25条的情况下,识别率在92%左右(总共测试了一万六千张验证码)。好吧,只能说验证码太简单。。

以上。

‘贰’ Python开发文字点选验证码,有什么推荐的方法

文字点选验证码(Click Captcha)是一种常见的验证码形式,纳雹通常由若干个字符或单词组成,要求用户点击其中指定的字符或单词,以验证用户身份。

在Python开发中实现文字点选验证码,一种常用的方法是使用图像处理库和机器学习库,以下是一些常用的库和方法:

‘叁’ python 爬虫,关于验证码的问题。输入验证码才能搜索。

#给你个例子参考验证码请求一次就变了
#!/usr/bin/python
#coding=utf-8
importrequests
importurllib
importurllib2,hashlib,md5

importcookielib

def_md5(password):
md5=hashlib.md5()
md5.update(str.encode(password))
psw=md5.hexdigest()
returnpsw
url='https://passport.liepin.com/captcha/randomcode?2hy270c2ji1'
req=urllib2.Request(url)
res_data=urllib2.urlopen(req)
res=res_data.read()
output_file=open('1.jpg','wb')
output_file.writelines(res)
output_file.close()
verifycode=res_data.headers['Set-Cookie'].split(';')[0]
verifycode=verifycode.replace('verifycode=','')
filename=res_data.headers['Content-disposition'].split(';')[1].strip()
exec(filename)

cookiejar=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
vidcode=raw_input(u"请输入验证码(在本路径1.jpg):")
data={'user_login':"[email protected]",
'isMd5':"1",
'user_pwd':_md5('love123456'),
'verifycode':vidcode,
'url':""}

url='https://passport.liepin.com/h/login.json'
data=urllib.urlencode(data)
headers={'Content-Type':'application/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest','Cookie':'verifycode={0};'.format(verifycode)}
request=urllib2.Request(url,data,headers)
response=opener.open(request)
print'-------result-------------'
printresponse.read()
print'-------headers-------------'
printresponse.headers
print'-------cookies-------------'
forcookieincookiejar:
printcookie

‘肆’ python验证码识别模块

只需要简单几步操作即可拥有两大通用识别模块,让你在工作中畅通无阻。

测试图片 test1.png

测试图片 test2.jpg

以上参数两者选其一即可,默认 model_type 为 ModelType.OCR, 若指定 conf_path 参数则优先使用自定义模型。

注意: 因模块过新,阿里/清华等第三方源可能尚未更新镜像,因此手动指定使用境外源,为了提高依赖的安装速度,可预先自行安装依赖:tensorflow/numpy/opencv-python/pillow/pyyaml

输出结果:

OCR和验证码识别的速度基本都在10ms左右,低配CPU可能需要15-20ms。本模块仅支持单行识别,如有多行识别需求请自行采用目标检测预裁图片。

‘伍’ python tesserocr识别普通验证码成功后打印结果为空

和threshold=127这个有关系,变更这个数值就能看出来了,比如调成200

‘陆’ python如何识别验证码

我们首先识别最简单的一种验证码,即图形验证码。这种验证码最早出现,现在也很常见,一般由4位字母或者数字组成。例如,中国知网的注册页面有类似的验证码,页面如下所示:

表单中最后一项就是图形验证码,我们必须完全正确输入图中的字符才可以完成注册。

更多有关验证码的知识,可以参考这些文章:

Python3爬虫进阶:识别图形验证码

Python3爬虫进阶:识别极验滑动验证码

Python3爬虫进阶:识别点触点选验证码

Python3爬虫进阶:识别微博宫格验证码

·本节目标以知网的验证码为例,讲解利用OCR技术识别图形验证码的方法。

·准备工作识别图形验证码需要库tesserocr,以mac安装为例:在mac下,我们首先使用Homebrew安装ImageMagick和tesseract库: brew install imagemagickbrew install tesseract 接下来再安装tesserocr即可:pip3 install tesserocr pillow这样我们就完成了 tesserocr的安装。

·获取验证码为了便于实验,我们先将验证码的图片保存到本地。打开开发者工具,找到验证码元素。验证码元素是一张图片,它的ser属 性是CheckCode.aspk。所以我们直接打开如下链接就可以看到一个验证码,右键保存即可,将其命名为code.jpg:

这样我们就得到一张验证码图片,以供测试识别使用。

相关推荐:《Python教程》

识别测试

接下来新建一个项目,将验证码图片放到项目根目录下,用tesserocr库识别该验证码,代码如下所示:

这里我们新建了一个Image对戏那个,调用了tesserocr的image_to_text( )方法。传入该Image对象即可完成识别,实现过程非常简单,结果如下:

我们可以看到,识别的结果和实际结果有偏差,这是因为验证码内的多余线条干扰了图片的识别。

另外,tesserocr还有一个更加简单的方法,这个方法可以直接将图片文件转为字符串,代码如下:

不过这种方法的识别效果不如上一种的好。

验证码处理

对于上面的图片,我们可以看到其实并没有完全识别正确,所以我们需要对图像作进一步的处理,如灰度转换、二值化等操作。

我们可以利用Image对象的convert( )方法参数传入L,即可将图片转化为灰度图像,代码如下:

传入1即可将图片进行二值化处理,如下所示:

我们还可以指定二值化的阈值。上面的方法采用的是默认阈值127。不过我们不能直接转化原图,要将原图先转化为灰度图像,然后再指定二值化阈值,代码如下:

在这里,变量threshold代表二值化阈值,阈值设置为160,之后我们来看看我们的结果:

我们可以看到现在的二维码就比较方便我们进行识别了;那么对于一些有干扰的图片,我们做一些灰度和二值化处理,这会提高图片识别的正确率。

‘柒’ python 爬取带验证码需要登陆后的网站

这个有点繁琐,告诉你,你也可能搞不定
首先请求网页,然后用你的未登录cookies去二次请求验证码,用byte类型保存在内存中,用pillow模块展示出来,你在手动输入,主程序这边用input阻塞,等你输入完,主程序向登录接口提交账号密码和验证码,然后后面就正常爬取,这是非selenium的模拟登录,这边纠正一点,凡是登录,不管你用什么模块,都属于模拟登录,并非selenium登录方式才叫模拟登录,

‘捌’ 如何利用Python 做验证码识别

#!/usr/bin/python3.4
#-*-coding:utf-8-*-

#1、pip3installpyocr
#2、pip3installpilloworeasy_installPillow
#3、安装tesseract-ocr:http://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tesseract-ocr-setup-3.02.02.exe,安装在C:ProgramFiles下
#4、要求python默认安装在C盘
#http://www.cnblogs.com/TTyb/p/5996847.html
#代码:
#!/usr/bin/python3.4
#-*-coding:utf-8-*-

importpytesseract
fromPILimportImage

image=Image.open('../jpg/code.png')
code=pytesseract.image_to_string(image)
print(code)

阅读全文

与python读取验证码相关的资料

热点内容
世界史纲pdf 浏览:131
湖北社保年审app叫什么名字 浏览:852
迈达克云服务器 浏览:595
mfc深入浅出从mfc设计到mfc编程 浏览:81
萤石云服务器连接设置 浏览:325
中国名着pdf 浏览:592
华为服务器设备序列号怎么看 浏览:319
跑永辉生活配送用什么app 浏览:149
ug识别符号命令在哪里 浏览:719
pdf文件改文字 浏览:732
查询qq号剑灵服务器地址 浏览:552
国家反诈中心app为什么要刷脸 浏览:303
iphone怎么修改dns服务器地址 浏览:85
bandizip解压位置 浏览:168
服务器的防火墙如何访问 浏览:306
javagoto关键字 浏览:847
广州少儿编程加盟排名榜 浏览:122
51单片机th0 浏览:292
冠军交易pdf 浏览:208
excelword转换成pdf 浏览:389