在 Node js 中获取浏览器选项卡标题

Get browser tab titles in Node js

我试图在浏览器中获取选项卡的标题,例如在我的 Node 应用程序中说 Google Chrome。类似于 Win32 API 中的 GetWindowText()。如果可能,需要适用于多种浏览器

目前在 Node 中我可以检索当前进程的列表,但我无法找到任何可以提供该进程详细信息的信息,这相当于打开任务管理器并单击Google Chrome 处理并为您提供选项卡的名称。

我尝试了一些来自 npm 的节点模块,但是它们似乎没有 return 我需要的信息。我也在这里寻找过类似的问题,但没有找到与我在这里提出的问题相似的问题。

因此,如果有人能指出我正确的方向,我将不胜感激,

谢谢

您应该在此处查看 Chrome 远程调试协议:

https://developer.chrome.com/devtools/docs/debugger-protocol

具体这部分:

In this scenario, you can substitute Developer Tools front-end with your own implementation. Instead of navigating to the HTML page at http://localhost:9222, your application can discover available pages by requesting:

http://localhost:9222/json and getting a JSON object with information about inspectable pages along with the WebSocket addresses that you could use in order to start instrumenting them.

有几个 node.js 库可以使用该协议。

https://github.com/cyrus-and/chrome-remote-interface

https://github.com/node-inspector/node-inspector

这些可能对您有所帮助。

我通过在我的应用程序中使用 ffiref 节点模块解决了我的问题,这些模块允许我使用 user32.dll 或我想创建的任何其他 .dll。然后我从 node-ffi - callback extraction of EnumWindows 中找到了这段代码,我将其更改为 JavaScript 这对我有用。

var voidPtr = ref.refType(ref.types.void);
var stringPtr = ref.refType(ref.types.CString);

var bindings = {
    EnumWindows: ['bool', [voidPtr, 'int32']],
    GetWindowTextA: ['long', ['long', stringPtr, 'long']]
};

var user32 = ffi.Library('user32', bindings);
var windowProc = ffi.Callback('bool', ['long', 'int32'], function (hwnd, lParam) {
    var buf = new Buffer(255);
    var ret = user32.GetWindowTextA(hwnd, buf, 255);
    var name = ref.readCString(buf, 0);     
    console.log(name);   
    return true;      
});

var checkTitles = user32.EnumWindows(windowProc, 0);

然而,这仅适用于 Windows,我还没有找到(正确查找)OSX 的解决方案。希望这可以帮助其他人