当前位置: 首页 > news >正文

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

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)

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

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

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

相关文章:

  • cheerp 简介
  • CSS 三角实现
  • 第十二章 Java内存模型与线程
  • 从源码分析如何优雅的使用 Kafka 生产者
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • 阿里云重庆大学大数据训练营落地分享
  • Android Studio多渠道打包实战
  • 传统企业触网的战略--借助电商外包
  • 本周ASP.NET英文技术文章推荐[06/10 - 06/16]
  • 匈奴的历史简述
  • SpringCloud(Finchley版)6 - Config-Client
  • Golang-长连接-状态推送
  • 硬盘结构
  • 虚函数可不可以是内联函数
  • 用JS实现人脑和计算机交互,这个厉害了
  • 《Java编程思想》读书笔记-对象导论
  • 2019年如何成为全栈工程师?
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • express + mock 让前后台并行开发
  • java 多线程基础, 我觉得还是有必要看看的
  • Js基础——数据类型之Null和Undefined
  • laravel5.5 视图共享数据
  • Median of Two Sorted Arrays
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • webpack+react项目初体验——记录我的webpack环境配置
  • 基于 Babel 的 npm 包最小化设置
  • 记一次和乔布斯合作最难忘的经历
  • 技术胖1-4季视频复习— (看视频笔记)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 算法系列——算法入门之递归分而治之思想的实现
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 小程序01:wepy框架整合iview webapp UI
  • 小李飞刀:SQL题目刷起来!
  • 再谈express与koa的对比
  • 在weex里面使用chart图表
  • 走向全栈之MongoDB的使用
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • mysql面试题分组并合并列
  • ​Python 3 新特性:类型注解
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #AngularJS#$sce.trustAsResourceUrl
  • #pragma multi_compile #pragma shader_feature
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (一)Linux+Windows下安装ffmpeg
  • *p++,*(p++),*++p,(*p)++区别?
  • .gitignore文件_Git:.gitignore
  • .net core 6 redis操作类
  • .net core 控制台应用程序读取配置文件app.config
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题