验证码识别并复制到剪切板

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

前面两篇博客,已经分别就验证码识别与验证码图片获取进行了研究,但是起用selenium+webdriver还是一点点笨重,这篇文章的目的是直接在网页上识别验证码,并将识别出来的验证码文本复制到剪切板中。

识别网站:

http://www.scliangfu.com/Themes/Manages/Login.aspx

实现代码:

# -*- coding: utf-8 -*-
from PIL import ImageGrab
import pytesseract
import win32clipboard as w    
import win32con

def setText(aString):#写入剪切板  
    w.OpenClipboard()  
    w.EmptyClipboard()
    w.SetClipboardText(aString)  
    w.CloseClipboard()  

def clear_image(image):
    image = image.convert('RGB')
    width = image.size[0]
    height = image.size[1]
    noise_color = get_noise_color(image)
    for x in range(width):
       for y in  range(height):
            #清除边框和干扰色
            rgb = image.getpixel((x, y))
            if (x == 0 or y == 0 or x == width - 1 or y == height - 1 
                or rgb == noise_color or rgb[1]>100):
                image.putpixel((x, y), (255, 255, 255))
    return image

def get_noise_color(image):
	for y in range(1, image.size[1] - 1):
		# 获取第2列非白的颜色
		(r, g, b) = image.getpixel((2, y))
		if r < 255 and g < 255 and b < 255:
			return (r, g, b)
#我个人使用的是按键精灵的抓抓工具,确定验证码坐标区域和截屏区域        
rangle = (820,535,924,571)
print_screen = (0,0,1600,900)
#载屏
im = ImageGrab.grab(print_screen)
image = im.crop(rangle)

#必要时将剪切的图片保存下来,查看剪切是否到位,并做相应的调整
#image.save("test.png")

image = clear_image(image)
imgry = image.convert('L')

#必要时也可将降噪后的图片保存下来以做调整
#imgry.save("imgry.png")

code = pytesseract.image_to_string(imgry)
setText(code)

print(code)

上面的代码配合按键精灵表现得相当好,只需要像下面那样:

验证码识别并复制到剪切板_第1张图片

运行get_code.py程序,按下ctrl+v就可以将验证码粘贴上去了,非常方便。

转载于:https://my.oschina.net/moluyingxing/blog/2999129

你可能感兴趣的:(验证码识别并复制到剪切板)