有朋友提出来了,有没有办法取到 QQ 的消息,是不是需要用抓屏,OCR 的方法?
其实不用的,微软定义了一套接口 UI Automation 用来自动化测试界面,或者提供给无障碍软件调用,方便残疾人使用 windows 程序 。既然它能自动化测试界面,也就是说能取到界面里的所有东西,要不然怎么测试呢 。
但是,并不是所有软件都支持UIA 。国外的大公司的软件,或者使用标准界面的程序都是支持的 。出于方便残疾人使用软件的角度上考虑,支持这套接口在有些国家是法律强制、或者建议的 。但是国内没有相关规定,国内的软件几乎都不支持,可是腾讯的 QQ 竟然支持!
腾讯的软件做还是非常好的,最少在国内来说它还是非常规范的 。先放个避雷针,没准哪天腾讯找来删这篇文章了 。
感谢 yin kaisheng 的 uiautomation,把 UIA 封装的这么好用 。
首先安装必须的库
pip install uiautomation
然后 打开 QQ 的消息窗口,这里只是演示,要是用程序打开消息窗口就比较麻烦,这里就不介绍了 。
文章插图
#导入必须的库
import uiautomation as auto
#找到消息窗口 。消息窗口的 ClassName='TXGuiFoundation',但是 QQ 主窗口的的类名也是这个 。所以需要再增加一个参数作为区分 Name='哈哈' ,这是消息窗口的名字,和对方的 QQ 昵称一样 。qq_win = auto.WindowControl(searchDepth=1, ClassName='TXGuiFoundation', Name='哈哈')
#先试着找到输入消息的编辑框,看看能不能取到里面的文字 。如果 QQ 窗口是合并的,可能会有多个编辑框,这时需要设置函数 EditControl 的 foundIndex 来取其它编辑框 。input_edit = qq_win.EditControl()print(input_edit.Name)print(input_edit.GetValuePattern().Value)#打印编辑框内的文字
#历史消息在 QQ 里是一个 list,list 会有很多 Children 。Children 的 Name 就是历史消息的文字部分了 。msg_list = qq_win.ListControl() #找到 listitems = msg_list.GetChildren()for one_item in items:#遍历所有的 Childrenprint(one_item.Name)#打印消息
现在可以看到效果了吧 。文章插图
这个例子只是简化的示例,大家快试试吧 。没准哪天这篇文章就被删了 。点个关注!收藏!谢谢!!
【使用 Python 读取 QQ 消息】
推荐阅读
- win10系统文件损坏不用怕,使用这2个命令,轻松修复
- Python大佬手把手教你用wxPython模块编写界面程序
- 安卓使用阿里云的日志服务
- 深入了解python的3D高级库pyvista
- 汽车车道视频检测:python+OpenCV为主实现
- Python网络爬虫数据提取神器 Selector 的用法
- 同步与异步Python有何不同?
- 用Python演示ARP攻击的过程及应对办法
- 使用Python调整图像大小
- 原来这才是Spring Boot使用AOP的正确姿势