使用 Python 读取 QQ 消息

微信扫一扫,分享到朋友圈

使用 Python 读取 QQ 消息

使用 Python 读取 QQ 消息

上一篇文章 《使用 Python 自动发送 QQ 消息》 发出以后,很多朋友非常感兴趣。还有朋友提出来了,有没有办法取到 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() #找到 list 
items = msg_list.GetChildren() 
for one_item in items:      #遍历所有的 Children 
    print(one_item.Name)    #打印消息 

现在可以看到效果了吧。

这个例子只是简化的示例,大家快试试吧。没准哪天这篇文章就被删了。点个关注!收藏!谢谢!!

微信扫一扫,分享到朋友圈

使用 Python 读取 QQ 消息

科学家发现目前地球唯一不呼吸氧气生物:存在至少35亿年

上一篇

洋码头首家“CHANGE·洋物运动”主题快闪店登陆上海世茂广场

下一篇

你也可能喜欢

使用 Python 读取 QQ 消息

长按储存图像,分享给朋友