通常对网站进行测试时找到后台地址后就想爆破一下,但是因为验证码的原因不能进行爆破,于是有了此文。
普通图形验证码识别的两种方法:一、第三方库识别验证码(这种方法我不太推荐,第二种选择更好一些)首先安装python的tesserocr这个库.,令人遗憾的是这个库的识别率不是很高,但可以通过大量的数据训练提高识别率。
通过审查元素可以发现验证码是一张图片
为了方便演示,我将图片保存到了本地。
第一种:首先建立一个Image对象,调用了tesserocr的image_to_text()方法,第二种方法是直接调用tesserocr的file_to_text()方法。
第二种方法的识别效率并不比第一种的识别效率好,所以我建议使用第一种方法。
输出的结果之中带有空白字符,所以在第一种方法获取结果后,我们采用正则来去除空白字符,最终结果为6495
提高识别效率
重新执行上面的代码结果为KKFT,这结果显然不是我们想要的。
对于这种情况,我们还需要做一下额外的处理,如转灰度、二值化等操作我们可以利用 Image 对象的 convert ()方法参数传人,即可将图片转化为灰度图像,我们还可以指定二值化的阔值 上面的方法采用的是默认阔值 127 不过我们不能直接转化原图,要将原图先转为灰度图像,然后再指定二值化阔值:
image = image. convert(' L' )threshold = 80table = []for i in range(256):if i < threshold:table.append(0)else:table.append(1)image = image.point(table,’1' )image. show()
转换结果如图所示。此时的识别结果是正确的。获取到正确的验证码文本后,我们可以通过urllib或者requests模拟发送表单从而实现爆破的目的。
二、第三方API识别验证码这里我以某识别验证码的网站的api为例1:首先注册用户并登录2:注册软件id打开用户中心,找到软件ID
点击生成一个软件ID
软件名称和软件说明可以随意填写,自己看得懂就好。
然后获取官方的api,这个api是python2版本的,我们需要更改几个地方
之后我们在chaojiying.py中定义一些变量用于保存用户数据
soft_id是你生成软件ID的IDsoft_kind是价格体系中的验证码类型,如图所示
为了方便演示,我直接将要识别的验证码图片放到了本地
然后将Chaojiying_Client()这个类中传入三个参数,分别是xxx网站账号,xxx网站密码,软件id
open中的路径更改成获取的图片路径之后退出编辑,终端运行python3 chaojiying.py
运行打印出了一个json数组,其中pic_str就是验证码的值。
准确无误!有了验证码的值就可以实现对有验证码的后台进行爆破(虽然这是废话…)对于其他类型的验证码(极验滑动验证码、点触验证码、微博宫格验证码),需要专业的爬虫知识,调用第三方api识别等待,请自行扩展学习。
领取专属 10元无门槛券
私享最新 技术干货