在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记。

首选导入一些用到的库,re、Image、pytesseract、selenium、time

import re # 用于正则

from PIL import Image # 用于打开图片和对图片处理

import pytesseract # 用于图片转文字

from selenium import webdriver # 用于打开网站

import time # 代码运行停顿

首先需要获取验证码图片,才能进一步识别。

创建类,定义webdriver和find_element_by_selector方法,用来打开网页和定位验证码图片的元素

class VerificationCode:

def __init__(self):

self.driver = webdriver.Firefox()

self.find_element = self.driver.find_element_by_css_selector

然后打开浏览器截取验证码图片

def get_pictures(self):

self.driver.get('http://123.255.123.3') # 打开登陆页面

self.driver.save_screenshot('pictures.png') # 全屏截图

page_snap_obj = Image.open('pictures.png')

img = self.find_element('#pic') # 验证码元素位置

time.sleep(1)

location = img.location

size = img.size # 获取验证码的大小参数

left = location['x']

top = location['y']

right = left + size['width']

bottom = top + size['height']

image_obj = page_snap_obj.crop((left, top, right, bottom)) # 按照验证码的长宽,切割验证码

image_obj.show() # 打开切割后的完整验证码

self.driver.close() # 处理完验证码后关闭浏览器

return image_obj

未处理前的验证码图片如下:

未处理的验证码图片,对于python来说识别率较低,仔细看可以发现图片里有很对五颜六色扰乱识别的点,非常影响识别率。

下面对获取的验证码进行处理。

首先用convert把图片转成黑白色。设置threshold阈值,超过阈值的为黑色

def processing_image(self):

image_obj = self.get_pictures() # 获取验证码

img = image_obj.convert("L") # 转灰度

pixdata = img.load()

w, h = img.size

threshold = 160 # 该阈值不适合所有验证码,具体阈值请根据验证码情况设置

# 遍历所有像素,大于阈值的为黑色

for y in range(h):

for x in range(w):

if pixdata[x, y] < threshold:

pixdata[x, y] = 0

else:

pixdata[x, y] = 255

return img

经过灰度处理后的图片

然后删除一些扰乱识别的像素点。

def delete_spot(self):

images = self.processing_image()

data = images.getdata()

w, h = images.size

black_point = 0

for x in range(1, w - 1):

for y in range(1, h - 1):

mid_pixel = data[w * y + x] # 中央像素点像素值

if mid_pixel < 50: # 找出上下左右四个方向像素点像素值

top_pixel = data[w * (y - 1) + x]

left_pixel = data[w * y + (x - 1)]

down_pixel = data[w * (y + 1) + x]

right_pixel = data[w * y + (x + 1)]

# 判断上下左右的黑色像素点总个数

if top_pixel < 10:

black_point += 1

if left_pixel < 10:

black_point += 1

if down_pixel < 10:

black_point += 1

if right_pixel < 10:

black_point += 1

if black_point < 1:

images.putpixel((x, y), 255)

black_point = 0

# images.show()

return images

python 识别登陆验证码图片(完整代码)_python 识别登录验证码图片功能的实现代码(完整代码)...相关推荐

  1. python制做简单图片代码_Python简单的制作图片验证码

    -人人可以学Python-- 这里示范的验证码都是简单的,你也可以把字符扭曲 人人可以学Python.png Python第三方库无比强大,PIL 是python的一个d第三方图片处理模块,我们也可以 ...

  2. python车牌识别系统开源代码_python+opencv实现车牌定位功能(实例代码)

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

  3. 手写体识别代码_Python识别图片中的文字

    一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...

  4. python两条曲线图片相似度_Python比较两个图片相似度的方法

    本文实例讲述了Python比较两个图片相似度的方法.分享给大家供大家参考.具体分析如下: 这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一 ...

  5. python怎么跳转到某一行代码_Python中免验证跳转到内容页的实例代码

    在本篇文章里小编给大家整理的是一篇关于Python中免验证跳转到内容页的实例代码,有兴趣的朋友们可以学习分享下. 相信很多人在浏览网页时,经常会碰到需要输入验证码才可以继续浏览的情况吧,遇到这种问题, ...

  6. python爬取一张图片并保存_python爬取网页图片并保存到本地

    先把原理梳理一下:首先我们要爬取网页的代码,然后从中提取图片的地址,通过获取到的地址来下载数据,并保存在文件中,完成. 下面是具体步骤: 先确定目标,我挑选的是国服守望先锋的官网的英雄页面,我的目标是 ...

  7. python查看图片颜色统计_Python通过PIL获取图片主要颜色并和颜色库进行对比的方法...

    本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指 ...

  8. 最炫python表白代码_Python制作微信好友背景墙教程(附完整代码)

    引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这里作了模糊处理. 是不是很炫,而且这还是独一无二的,毕竟 ...

  9. python加载图片的方法_python从网络读取图片并直接进行处理的方法

    python从网络读取图片并直接进行处理的方法 更新时间:2015年05月22日 10:09:08 作者:pythoner 这篇文章主要介绍了python从网络读取图片并直接进行处理的方法,涉及cSt ...

最新文章

  1. js如何去除多个cookie?
  2. 详解一个ThreadLocal 的谜题
  3. 【LeetCode每周算法】零钱兑换
  4. java io流顶层_Java中的IO流(一)
  5. 出现could not find developer disk image解决办法和不受信任的开发者
  6. 贷款,别相信这些人!
  7. 前端学习(2379):加入git管理
  8. VSRE的完整形式是什么?
  9. bootstrap-table前端修改后台传来的数据重新进行渲染
  10. dockerfile用yum安装mysql服务
  11. Intellij IDEA Cannot resolve symbol XXX 问题解决办法汇总
  12. np.array的shape的区别
  13. Java-Arrays数组操作
  14. Python的迭代器
  15. Search Insert Position - LeetCode
  16. Google发布MobileNets,一种预训练的高效Tensorflow计算机视觉模型
  17. 展锐sc8541E多媒体网络摄像播放-液晶驱动一体板
  18. 计算机开机总要按f1键,为什么开机要按f1键?win7每次开机按f1才能进入系统怎么办...
  19. CPU是如何制造出来的(附高清全程图解)
  20. Go基础(7)-golang面向对象三大特征(封装,继承,多态)

热门文章

  1. 吉首大学 问题 L: 小李子的老年生活
  2. oracle内存结构(PGA、SGA)
  3. 地铁线路图的设计与实现
  4. 用记事本打造简易计算器
  5. [转贴]原创控件代码共享--日期选择控件
  6. java中遍历collection_使用Java中的Iterator遍历Collection
  7. 作为技术人员,经常遇到没有接触过的技术,有时是点滴的小技能,有时可能是大的一个研究课题,那么我们如何进行技术研究呢?
  8. 对无线编码缓存的一些理解
  9. Python机器学习:KNN算法06网格搜索
  10. c语言void和null,C语言:为什么我得到NULL?