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

前面两篇博客,已经分别就验证码识别与验证码图片获取进行了研究,但是起用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)

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值