如果这个问题太笼统,我深表歉意,如果是,请随时编辑。我正在设计一个 AI 系统,用于监视/观察人类与桌面环境的交互并从中学习。我可能会使用图像捕捉和计算机视觉,但这会增加屏幕上交互元素的复杂性。我想知道是否有一种方法可以直接从浏览器获取用户与之交互的实际 DOM 或 HTML 元素(鼠标单击、焦点、kb 输入等)。在 Windows 中,我可以将 DLL 挂接到浏览器中,但在 Linux 中,我不知道如何做类似的事情。这背后的想法是,当用户单击“按钮”登录时,而不是使用 CV 捕获图像像素,我实际上得到了用户与之交互的元素的数据结构。我怎么能做这样的事情?该引擎将是使用 C/C++ 开发的服务。
问问题
236 次
3 回答
1
Firefox的Selenium 插件,通常用于测试,具有记录/播放机制,可能能够记录您正在查找的事件类型。
于 2012-11-27T19:26:51.423 回答
1
如果您的软件可以提示用户安装浏览器扩展,那么您可以轻松地为每个浏览器编写不同的扩展。这些写起来比较简单。
您可以找到一些可以嵌入到扩展程序中的开源代码,例如 Selenium 代码库,或者简单地使用 JavaScript 库(jQuery?)来捕获所有浏览器事件并发送看起来像用户交互的事件(单击、滚动等)与 DOM 详细信息和任何其他数据一起发送到您的系统。也许让您的引擎公开一个 REST 服务以进行集成。
但是,请注意性能 - 根据您发送的数量,您可能需要实现工作队列和批处理事件,或者您可能会减慢他们的浏览器速度。
OTOH,如果您需要不理会他们的浏览器,那么我不相信您将能够以编程方式确定支持屏幕上像素的 HTML/DOM 结构。至少,不是我知道的任何工具,而且逻辑支持这一点:由于每个浏览器都使用自己的代码库实现 DOM 操作和显示,内存中数据的格式是任何人的猜测。
于 2012-11-27T19:35:02.317 回答
1
如果你正在监控桌面环境,我对 Linux 环境有以下建议。
- 尝试捕获 XWindow 事件。由于 KDE、GNOME 等窗口管理器是在它之上构建的,因此可能会为您提供更多信息。
- 关于浏览器,正如其他人所说,最好使用插件。它也是一个跨平台的解决方案。
这里给出了 X 事件观察器的起点。希望这对您有所帮助。
于 2012-11-27T20:08:27.217 回答