在 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
这些可能对您有所帮助。
我通过在我的应用程序中使用 ffi
和 ref
节点模块解决了我的问题,这些模块允许我使用 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 的解决方案。希望这可以帮助其他人
我试图在浏览器中获取选项卡的标题,例如在我的 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
这些可能对您有所帮助。
我通过在我的应用程序中使用 ffi
和 ref
节点模块解决了我的问题,这些模块允许我使用 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 的解决方案。希望这可以帮助其他人