当前位置:首页 » 编程语言 » python获取图片验证码

python获取图片验证码

发布时间: 2023-07-09 00:38:11

‘壹’ python爬验证码

1.找地址

首先,我们要找到这个网站生成验证码的地址,这个地址我们可以通过查看他的源代码来实现。

1.找地址

首先,我们要找到这个网站生成验证码的地址,这个地址我们可以通过查看他的源代码来实现。

就以某大学教务网为例,这个教务网的模板很多学校都在采用:

我就截取表单的验证码部分即可。

<tdalign="center"rowspan="3">
<imgid="imgCode"src="../sys/ValidateCode.aspx"
onclick="changeValidateCode(this)"alt="单击可更换图片!"
style="CURSOR:pointer;">
<br>看不清,则单击图片!
</td>123456123456

这里就可以知道,地址就是../sys/ValidateCode.aspx

组合一下地址就是http://jwmis.lmu.cn/sys/ValidateCode.aspx

也就是我们等一下要用到的地址了。

我们可以查看一下那个网页。

2.处理图片

去查看了一下那个地址

果不其然,都是乱码,因为验证码分为两种。

1)直接处理成JPG/GIF/PNG或者其他格式,然后直接读取到一个图片地址。

2)接收用户触发,然后生成,再直接处理成图像,不读取到一个图片地址。

我们这里是第二种,我们要自己来读取他,到本地,再手动输入验证码。

#-*-coding:utf-8-*-
importurllib2
#验证码的处理#
#验证码生成页面的地址#
im_url='http://jwmis.lmu.cn/sys/ValidateCode.aspx'
#读取验证码图片#
im_data=urllib2.urlopen(im_url).read()
#打开一个Code.PNG文件在D盘,没有的话自动生成#
f=open('d:\Code.png','wb')
#写入图片内容#
f.write(im_data)
#关闭文件#
f.close()

这里包括两个部分:

1)打开那个生成验证码图片的页面,读取

2)将读取到的内容,保存成图片,下载到本地

我们这里的地址是可以随便写的,保存在你想保存的地方。

到这里我们就完成了验证码的一小部分。

by–LoDog

希望能帮到你!

‘贰’ python抓取网页时是如何处理验证码的

python抓取网页时是如何处理验证码的?下面给大家介绍几种方法:

1、输入式验证码

这种验证码主要是通过用户输入图片中的字母、数字、汉字等进行验证。如下图:

解决思路:这种是最简单的一种,只要识别出里面的内容,然后填入到输入框中即可。这种识别技术叫OCR,这里我们推荐使用Python的第三方库,tesserocr。对于没有什么背影影响的验证码如图2,直接通过这个库来识别就可以。但是对于有嘈杂的背景的验证码这种,直接识别识别率会很低,遇到这种我们就得需要先处理一下图片,先对图片进行灰度化,然后再进行二值化,再去识别,这样识别率会大大提高。

相关推荐:《Python入门教程》

2、滑动式验证码

这种是将备选碎片直线滑动到正确的位置,如下图:

解决思路:对于这种验证码就比较复杂一点,但也是有相应的办法。我们直接想到的就是模拟人去拖动验证码的行为,点击按钮,然后看到了缺口的位置,最后把拼图拖到缺口位置处完成验证。

第一步:点击按钮。然后我们发现,在你没有点击按钮的时候那个缺口和拼图是没有出现的,点击后才出现,这为我们找到缺口的位置提供了灵感。

第二步:拖到缺口位置。

我们知道拼图应该拖到缺口处,但是这个距离如果用数值来表示?

通过我们第一步观察到的现象,我们可以找到缺口的位置。这里我们可以比较两张图的像素,设置一个基准值,如果某个位置的差值超过了基准值,那我们就找到了这两张图片不一样的位置,当然我们是从那块拼图的右侧开始并且从左到右,找到第一个不一样的位置时就结束,这是的位置应该是缺口的left,所以我们使用selenium拖到这个位置即可。

这里还有个疑问就是如何能自动的保存这两张图?

这里我们可以先找到这个标签,然后获取它的location和size,然后 top,bottom,left,right = location['y'] ,location['y']+size['height']+ location['x'] + size['width'] ,然后截图,最后抠图填入这四个位置就行。

具体的使用可以查看selenium文档,点击按钮前抠张图,点击后再抠张图。最后拖动的时候要需要模拟人的行为,先加速然后减速。因为这种验证码有行为特征检测,人是不可能做到一直匀速的,否则它就判定为是机器在拖动,这样就无法通过验证了。

3、点击式的图文验证和图标选择

图文验证:通过文字提醒用户点击图中相同字的位置进行验证。

图标选择: 给出一组图片,按要求点击其中一张或者多张。借用万物识别的难度阻挡机器。

这两种原理相似,只不过是一个是给出文字,点击图片中的文字,一个是给出图片,点出内容相同的图片。

这两种没有特别好的方法,只能借助第三方识别接口来识别出相同的内容,推荐一个超级鹰,把验证码发过去,会返回相应的点击坐标。

然后再使用selenium模拟点击即可。具体怎么获取图片和上面方法一样。

4、宫格验证码

这种就很棘手,每一次出现的都不一样,但是也会出现一样的。而且拖动顺序都不一样。

但是我们发现不一样的验证码个数是有限的,这里采用模版匹配的方法。我觉得就好像暴力枚举,把所有出现的验证码保存下来,然后挑出不一样的验证码,按照拖动顺序命名,我们从左到右上下到下,设为1,2,3,4。上图的滑动顺序为4,3,2,1,所以我们命名4_3_2_1.png,这里得手动搞。当验证码出现的时候,用我们保存的图片一一枚举,与出现这种比较像素,方法见上面。如果匹配上了,拖动顺序就为4,3,2,1。然后使用selenium模拟即可。

‘叁’ python爬取验证码图片,遇到验证码src属性为完整的网址应该怎么做

爬虫中手动输入验证码方法无法获取图片src地址
验证码在html中图片标签内容:
<class=“verCodeImg” src="/kaptcha.jpg?v=0.234724039578059" οnclick=“verCode(this)”>
< class=“verCodeImg” src="/kaptcha.jpg?v=0.234724239578059" οnclick=“verCode(this)”>
可知获取到验证码的src地址就能动态的获得验证码
因为验证码是动态的!动态的!动态的!
用动态爬取网页的方法:
要用到selenium库
其实获得了验证码的src地址,我还是没能成功登陆
因为即使是相同的链接点进去,每一次刷新都会有不同的验证码
通过动态网页打开是一张
解析src地址出来是另一张

‘肆’ 用python如何直接获取jsp生成的验证码图片

你只需要正常请求图片就行了,分析一下image的src,把它拼接成一个完整的URL去请求就好了,得到的有可能是BASE64编码串,或者是文件,把它保存下来就可以了。

‘伍’ 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】爬虫:短信验证码的获取

最近一直在琢磨写一个有点烦人的小爬虫,结果琢磨着,就花了一点点时间山败,写了这样一个“不友好”的,被许多人讨厌的爬虫😂:频繁收取短信验证码的‘坏’程序,姑且称为是生活中的晌唯改一个"小恶作剧"吧。
对不起啦🙈,对那些老被我获取验证码的网站(🙈并非有意要增加你们维护网站的成本💦)。

【备注】:此小程序仅用做技术探究学习,🚫不可用于宴判侵犯他人利益

【解释一下】:对验证码的获取,不同的网页有不同的方式,但总结下来,主要分为以下几种:

下面以苏宁易购为例,(界面做的蛮好看的,点个赞)讲述一下大致的短信获取的步骤。

【后续 程序如下】:

【结语】:作者仅出于学习爬虫的初衷,分享本文,如有问题,欢迎留言。

‘柒’ python怎么生成随机图形验证码

1.安装pillow模块
pip install pillow
2.pillow模块的基本使用
1.创建图片
from PIL import Image
#定义使用Image类实例化一个长为400px,宽为400px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(400,400),color=(255,255,255))
#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
img1.save(f,format="png")
#显示图片
img1.show()
运行程序,程序会在py文件的同级下生成一个名为"pic.png"的小图片,图片长为400px,宽为400px,颜色为白色.
2.创建画笔
#创建画笔,用于在图片上生成内容
draw1=ImageDraw.Draw(img1,mode="RGB")
3.在图片上生成点
#在(100,100)坐标上生成一个红点,指定的坐标不能超过图片的尺寸
draw1.point([100,100],pill="red")
#在(80,80)坐标上生成一个黑点,指定的坐标不能超过图片的尺寸
draw1.point([80,80],fill=(0,0,0))
4.在图片上画线
#第一个括号里面的参数是坐标,前两个数为开始坐标,后两个数为结束坐标
#括号里的第二个参数指定颜色,可以直接指定,也可以用RGB来表示颜色
draw1.line((100,100,100,300),fill="red")
draw1.line((100,200,200,100),fill="blue")
运行程序,画笔会在(100,100)到(100,300)坐标之间画一条红色的竖线,在(100,200)到(200,100)坐标之间画一根蓝色的斜线
5.在图片在画圆
#括号里的第一个参数是坐标,前两个数为起始坐标,后两个为结束坐标
#用这两个坐标之间的正方形区域生成一个圆,大括号里的第二个参数为圆的开始角度
#第三个参数为圆的结束角度,0到360表示所画的是一个完整的圆形,
#也可以指定的数字来生成一段为圆弧,最后一个参数表示颜色,也可以用RGB来表示想要的颜色
draw1.arc((100,100,300,300),0,360,fill="red")
draw1.arc((0,0,300,300),0,90,fill="blue")
6.在图片在写文本
#使用画笔的text方法在图片上生成文本
#第一个参数为坐标,第二个参数为所有生成的文本的内容
#第三个参数为文本的颜色
draw1.text([0,0],"python","blue")
7.在图片在生成指定字体的文本
#先实例化一个字体对象,第一个参数表示字体的路径,第二个参数表示字体大小
font1=ImageFont.truetype("One Chance.ttf",28)
#在图片上生成字体
#第一个括号里的参数表示坐标,第二个参数表示写入的内容
#第三个参数表示颜色,第四个参数表示使用的字体对象
draw1.text([200,200],"linux","red",font=font1)
图片验证码的实例
#导入random模块
import random
#导入Image,ImageDraw,ImageFont模块
from PIL import Image,ImageDraw,ImageFont
#定义使用Image类实例化一个长为120px,宽为30px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(120,30),color=(255,255,255))
#实例化一支画笔
draw1=ImageDraw.Draw(img1,mode="RGB")
#定义要使用的字体
font1=ImageFont.truetype("One Chance.ttf",28)
for i in range(5):
#每循环一次,从a到z中随机生成一个字母或数字
#65到90为字母的ASCII码,使用chr把生成的ASCII码转换成字符
#str把生成的数字转换成字符串
char1=random.choice([chr(random.randint(65,90)),str(random.randint(0,9))])
#每循环一次重新生成随机颜色
color1=(random.randint(0,255),random.randint(0,255),random.randint(0,255))
#把生成的字母或数字添加到图片上
#图片长度为120px,要生成5个数字或字母则每添加一个,其位置就要向后移动24px
draw1.text([i*24,0],char1,color1,font=font1)
#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
img1.save(f,format="png")

‘捌’ opencv-python简单使用--识别滑动验证码缺口

以上是需要是别的图片缺口,来自某东登录。
opencv是计算机视觉。

1、 imread :读取图片
  imread(image_path, flag) :
    images_path :图片路径,找不到不报错
   flag :
     1/cv2.IMREAD_COLOR :彩色图片,图片透明性会被忽略,默认参数
     0/cv2.IMREAD_GRAYSCALE :灰色图片
     -1/cv2.IMREAD_UNCHANGED :包括其alpha通道
2、 imwrite
  imwrite(img_path_name,img)
   img_path_name :保存的文件名
   img :文件对象
3、 cvtColor
   cvtColor(img,code)
  img : 图像对象
   code :
    cv2.COLOR_RGB2GRAY : RGB转换到灰度模式
    cv2.COLOR_RGB2HSV : RGB转换到HSV模式(hue,saturation,Value)
4、 matchTemplate
  matchTemplate(img_path, bg_path, cv2.TM_CCOEFF_NORMED)
   img_path :对比图片
   bg_path :背景图片
  cv2.TM_CCOEFF_NORMED

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:640
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:368
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:85
php微信接口教程 发布:2025-04-16 17:07:30 浏览:310
android实现阴影 发布:2025-04-16 16:50:08 浏览:793
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:345
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:213
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:813
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:367
土压缩的本质 发布:2025-04-16 16:13:21 浏览:593