监测Python用户“行为”的好方法?

1 投票
1 回答
874 浏览
提问于 2025-04-16 15:15

我在找一些简单的API,想用Python获取用户在电脑上的使用信息。

以下是我觉得比较重要的内容:

  • 按键记录和鼠标事件 [PyKeylogger?] # 我知道这个在StackOverflow上已经讨论过了
  • 了解当前正在运行的进程信息
  • 更难一点,获取当前聚焦窗口的信息(比如它的名字?)# 这会很有意思
  • 更难的是,我能否向系统请求更多的信息?(比如,我能否查询这个窗口中某个图形元素显示的文本?假设这是一个浏览器,我能获取当前的URL吗?)

我希望得到的答案是关于Linux系统的,但如果Windows的解决方案更简单,我也感兴趣。目前我不太在乎跨平台的问题。

我想在Linux下可以通过运行一个shell脚本来获取输出,但我想知道这是否是常见的做法,或者是否有一些API已经把这个封装得很好了。

抱歉我的问题有点模糊,但我真的只是想评估一下在某些API下我能轻松获取到的信息程度,以及了解哪些工具在这类工作中是“常用”的。

谢谢你们提供的任何信息。

1 个回答

3

这个问题其实不算模糊,而是比较宽泛。你想要的信息大部分(正如你自己提到的)分散在StackOverflow的多个问题中。

我曾经为一个想要开发的生产力追踪应用做过一些研究。以下是我能给你的几点建议:

  • 如果你想监控和查询窗口的信息(比如标题、状态等),可以看看libwnck(参考:python-wnck)。要注意的是,当你创建一个WnckScreen对象时,它不会从X服务器获取信息,所以一开始看起来好像屏幕上没有工作区和窗口(这里有更多信息)。

  • 在某些情况下,你可以通过查询/proc中的条目来获取正在运行的进程的一些有用信息(你可以看看psutil模块)。不过,通常情况下你可能获取不到(这取决于你想要的信息)。

  • 如果你想查询某个应用程序的特定信息,就得看看那个应用程序支持什么功能。

    在Linux上,应用程序通常会通过D-Bus服务暴露相关的内部功能。

    比如,Totem就有一个D-Bus服务,它基本上暴露了主要的Totem对象,你可以用它来监控正在播放的内容等。Geany,我用的一个文本编辑器(或者说轻量级IDE),也有一个几乎功能完整的D-Bus插件,可以用来查询当前活动的标签等。

    Firefox在这方面有点特殊。多年来有过各种尝试去暴露D-Bus服务,但出于某种原因,这些努力似乎没有取得什么进展。你可以看看MozRepl,它可以让你“从内部编程Firefox和其他基于Mozilla的应用”(它通过telnet暴露一个交互式的命令行)。

  • 至于查询单个控件/小部件的通用方法。在Linux上,我只知道Parasite。如果你用过Firebug,它有点像那个,但适用于GTK+应用。不过,我对它在你的使用场景中的实用性表示怀疑。

    你也可以尝试利用辅助技术支持(比如屏幕阅读器等)。可以参考这个回答。不过我自己没有这方面的经验。

如果你有任何问题,欢迎在这个回答下留言。

撰写回答