使用 Python 读取 QQ 消息

上一篇 / 下一篇  2020-09-30 09:44:38

  有朋友提出来了,有没有办法取到 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)    #打印消息 
  现在可以看到效果了吧。
  这个例子只是简化的示例,大家快试试吧。

TAG: 软件开发 Python

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2020-12-01  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 8830
  • 日志数: 77
  • 建立时间: 2020-08-11
  • 更新时间: 2020-12-01

RSS订阅

Open Toolbar