2019独角兽企业重金招聘Python工程师标准>>>
前面两篇博客,已经分别就验证码识别与验证码图片获取进行了研究,但是起用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就可以将验证码粘贴上去了,非常方便。