阅读文章,大约需要5分钟时间

文章目录

  • 前言
  • 如何实现?
  • 算法思路分析
    • 代码如下
  • 总结

前言

如果想要识别电脑屏幕上微信输入框的位置,有什么办法呢?
这里提出了一种通过屏幕像素来识别的思路。


如何实现?

利用python第三方库:PIL图像处理库,对屏幕进行截图,通过分析屏幕像素点的RGB颜色值,只要匹配到微信输入框的某一特征位置像素点的RGB值,即找到了微信输入框的位置。

先来看看电脑微信有什么位置可以作为我们去匹配的特征位置。


有哪些可以作为特征提取的地方呢?

有6个地方都是可以作为特征位置,我们选择一个最容易被识别的位置,那就是第6个位置。我们来看看第6个位置有什么特点。

注意留意上面gif图中鼠标位置的RGB颜色值的变化,在分割线以下和分割线以上的位置RGB都是 (245,245,245)1,而分割线的位置RGB为 (236,236,236)


通过这个特征我们就可以找到微信输入框的位置。

算法思路分析

  • 对屏幕进行截屏,并把截图转换成可以读取RGB值的序列对象。
  • 对屏幕截图的RGB值进行遍历,去匹配(236,236,236)

但是,一个屏幕的像素点这么多,(比如我屏幕有1920*1080=2073600个像素点),这么多像素点难道要一个一个遍历?

如何快速而准确地找到 (236,236,236) 的位置?

上图是我的屏幕,划上6条竖线,只要两条竖线之间的间距小于微信输入框的宽度,竖线就一定会落在微信输入框上。因此,只要遍历6条竖线上的像素点,就一定能找到微信输入框位置。


代码如下

(完整代码在末尾)

  • 所需的库:PIL
from PIL import ImageGrabwidth, height = 1920, 1080  # 屏幕尺寸大小
img = ImageGrab.grab((0,0,width,height))  # 截取整个屏幕
imgData = img.getdata()  # 转换成序列化数据

变量imgData保存着截图的序列化数据,也就是说包含着每个像素点的RGB值的大小。
先来看一下imgData的长度:

2073600 刚好等于1920*1080,也就是包含了整个屏幕的像素点 。

分别索引看一下第1、2、3个像素点的值看一下是多少:

可以看出是用 二维元组 的数据类型存储着每个像素点的RGB值。

接下来便开始遍历这个二维数组:

spacing = int(width / 5)  # 两条竖线之间的间距
for j in range(height):  # 遍历竖线上的像素点place = j*width + i*spacing  # 第i列第j行在imgData的位置if imgData[place] == (236,236,236):  # 找到(236,236,236)这个颜色值if imgData[place-width] == (245,245,245) and \imgData[place+width] in ((245,245,245),(255,255,255)):# 判断分割线上面一个像素点和下面一个像素点的RGB值是否符合,防止误判for long in range(1,21):  # 判断分割线连续20个像素点是否都为(236,236,236),防止误判if imgData[place+long] != (236,236,236):breakelse:# 返回正确的位置(微信输入框分割线上某个点的位置)return place%width, int(place/width)

ps:

  • imgData是用二维的数据格式保存,所以寻找点(X,Y)时,需要 (Y-1)*屏幕宽度 +X .
  • 可以用numpy库将二维转换成三维数组,这样可以更方便对行和列进行处理,但是为了缩短程序运行时间(大约需要多花2秒钟),就不进行转换了,感兴趣的朋友可以试一下。

总结

  • 可以调用PIL.ImageGrab.grab() 进行屏幕截图
  • 遍历一张图片的所有像素点,寻找你想要的RGB值

识别屏幕上微信聊天输入框的位置,识别到位置之后,可以干什么呢?

欢迎有兴趣有想法的朋友一起交流。


以下贴出完整代码:

from PIL import ImageGrab
import numpy as npdef analysis_pixel():width, height = 1920, 1080img = ImageGrab.grab((0,0,width,height))imgData = img.getdata()# imgDataNp = np.array(imgData).reshape((1920,1080,3))  # 转换成三维数组spacing = int(width / 5)  # 两条竖线之间的间距for i in range(6):  # 遍历6条竖线for j in range(height):  # 遍历竖线上的像素点place = j*width + i*spacing  # 第i列第j行在imgData的位置try:   if imgData[place] == (236,236,236):  # 找到(236,236,236)这个颜色值if imgData[place-width] == (245,245,245) and imgData[place+width] in ((245,245,245),(255,255,255)):# 判断分割线上面一个像素点和下面一个像素点的RGB值是否符合,防止误判for long in range(1,21):  # 判断分割线连续20个像素点是否都为(236,236,236),防止误判if imgData[place+long] != (236,236,236):breakelse:# 返回正确的位置(微信输入框分割线上某个点的位置)return place%width, int(place/width)except IndexError:# 当遍历到最后一个点的时候会超出索引范围return 0return 0if __name__ == '__main__':print(analysis_pixel())

  1. 当微信输入框没有获得焦点的时候RGB为 (245,245,245) ,获得焦点的时候RGB为 (255,255,255) ↩︎

用python识别微信消息界面聊天输入框位置相关推荐

  1. android 仿微信demo————微信消息界面实现(服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  2. python自动回复微信群的消息_程序员用python实现微信消息群发和微信自动回复

    程序员用python实现微信消息群发和微信自动回复 每当逢年过节的时候, 你是否会遇到要给亲朋好友发祝福而不得不重复复制.改名.发送的麻烦, 还有收到许多好友祝福又来不及回复的情况.如果有,这篇文章正 ...

  3. android 仿微信demo————微信消息界面实现(移动端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  4. Python发送微信消息(文字、图片、文件)给指定好友和微信群,零基础可看懂(附源码和教程)

    前言 本示例是调用Windows API模拟发送,用Python调用win32api这个库来调用Windows API模拟人的手动操作来发送消息. 在使用前,请将你微信的窗口设置为在最前面,这样就便于 ...

  5. 使用 Python 实现微信消息的一键已读

    文章目录 使用 Python 实现微信消息的一键已读 1.实现思路 2.安装依赖 3.编写代码 4.运行效果 使用 Python 实现微信消息的一键已读 关键词 微信消息一键已读 微信消息批量已读 微 ...

  6. Python发送微信消息(文字、图片、文件)给指定好友和微信群(调用Win32 API模拟人的手动操作来发送消息)

    本示例是调用Windows API模拟发送,用Python调用win32api这个库来调用Windows API模拟人的手动操作来发送消息. 在使用前,请将你微信的窗口设置为在最前面,这样就便于程序找 ...

  7. python实现微信、QQ聊天自动回复【纯物理】

    一.功能描述 实现微信.QQ等聊天软件的自动回复功能,让你关注的人不用再等候你的回复.通过机器人或者预设消息来自动回答对方的问题. 二.实现方案 0. 方案说明 首先感谢热心网友指出了 itchat ...

  8. 用python开发微信公众平台聊天机器人

    最近用python写了一个聊天机器人的微信公众号,网上找的开发文档参差不齐,官方文档也比较老旧,还有部分小问题.于是,分享一下我的思路. 开发环境 windows sever 2008+python3 ...

  9. 利用Python发送微信消息的方法

    微信是支持用快捷键打开主界面的,这个可以在微信的设置里看到,如下图所示 我们就可以利用这一特性,用Python模拟按快捷键的操作,用来打开微信主界面. 打开主界面之后,使用Ctrl+F,定位到微信的搜 ...

最新文章

  1. python免费入门手册-Python 基础入门教程
  2. k8s设置pod privileged权限(特权):securityContext.privileged=true
  3. es类比关系型数据库
  4. MATLAB三维散点图的绘制(scatter3、plot3),同时标明序号
  5. Android学习系列(34)--App应用之发布各广告平台版本
  6. 零基础学python知乎-零基础人员可以学习python吗?|Python培训基础教程
  7. CentOS 6.4安装OpenOffice
  8. GeoTools操作Shape格式文件
  9. (六省)蓝桥真题 奇妙的数字
  10. 筛数方法相关系数_相关系数的检验方法.ppt
  11. SDN技术的十个关键因素
  12. Windows 10 的快捷关机方式
  13. win10共享打印机搜索不到计算机,w10共享打印机搜索不到如何处理
  14. Linux安装DBLE
  15. OSChina 周四乱弹 ——因为女同事衣服穿的薄 所以老板发现我没上班?
  16. connect() failed (111 Connection refused) while connecting to upstream
  17. Email和电子邮箱一样吗?
  18. 图神经网络:GAT学习、理解、入坑
  19. 【教程】farmskins怎么玩
  20. java删除确认_删除添加确认事件

热门文章

  1. jmeter---Throughput(吞吐量)系列
  2. WPF 基于 WER 注册应用崩溃无响应回调和重启方法
  3. 高等数学学习笔记——第三讲——函数的概念与性质(1. 函数的概念)
  4. 2021 Google 开发者大会进行时:汇聚开发者合力,共建全球技术生态
  5. 新零售赋能最古老产业 看阿里巴巴的农产品上行布局
  6. 齐岳供应TCPP-Fe(3+)四羧基苯基卟啉铁;TCPP-Zn(2+)四羧基苯基卟啉锌
  7. 使用图像处理技术去除图片水印
  8. Android适配阿拉伯语、波斯语语系
  9. “让数据多跑腿,让群众少跑路” 京东区块链助力司法体系实现高效透明
  10. 《重新理解创业》的读后感范文3000字