【问题标题】:Is it possible to simulate keyboard/mouse event in NodeJS?是否可以在 NodeJS 中模拟键盘/鼠标事件?
【发布时间】:2012-06-26 01:28:25
【问题描述】:

想象一下,当从控制台调用 NodeJS 模块时,会输出一些介绍性消息,然后等待用户输入(单击 enter 或 esc)。这个模块已经拥有并完成了我们需要的一切,除了 - 等待用户输入提示。所以我们想知道(我个人对 NodeJS 很陌生)是否可以以编程方式执行控制台模块并在其上触发输入事件,这样它就不会等待并立即继续工作?

【问题讨论】:

    标签: javascript node.js console


    【解决方案1】:

    您可以为此使用RobotJS

    示例代码:

    var robot = require("robotjs");
    
    // Type user's password or something. 
    robot.typeString("abc123");
    

    【讨论】:

    • 这应该是公认的答案,我刚刚用它模拟了robot.keyTap('enter')成功按下回车键。
    • 谢谢!超级简单,而且跨平台!
    • 可惜目前好像没有维护...
    【解决方案2】:

    正如 Jason 提到的,您可以使用 RobotJS 进行键模拟,但需要几个步骤才能正确构建 Windows paltform 的 robotsJS:

    1. 您需要 Windows 构建工具,因此请运行 npm install --global windows-build-tools(需要一些时间,因为它大约 120MB)
    2. 运行npm install robotjs --save-dev
      大功告成!
      如果这是 electron 应用程序,那么您还需要以下第三步:
    3. 运行npm rebuild --runtime=electron --target=1.7.9 --disturl=https://atom.io/download/atom-shell --abi=57

      (1.7.9 是我的electron --version,abi 是我对应的node --version 安装的8.7,您可以查看abi 版本的节点版本here [查找NODE_MODULE_VERSION 列])

    【讨论】:

    • 为什么是--save-dev 而不是--save
    • @DLight 这取决于您的软件包的用途以及该图书馆在其中的使用方式;如果这个包是一个独立的应用程序,那么没关系。如果这个包是一个库,那么它应该是正常的依赖关系,除非它只用于开发(因为devDependencies)如果包是从 NPM 安装的,则不会安装。
    【解决方案3】:

    node-key-sender 库是 RobotJs 的替代方案,如果您只需要将密钥发送到您的操作系统。它是跨平台且非常小的库。

    使用npm install --save-dev node-key-sender 安装它。

    然后使用以下命令向键盘发送“enter”:

    var ks = require('node-key-sender');
    ks.sendKey('enter');
    

    查看文档页面:https://www.npmjs.com/package/node-key-sender

    【讨论】:

    • 不幸的是,它需要一个成熟的 java 环境才能工作(它只是一个 jar 文件的包装器)!
    • 为什么是--save-dev 而不是--save
    • 因为他们将其保存为开发人员依赖而不是将其保存到正在运行的包中
    【解决方案4】:

    我尝试过robotjsnode-key-sender,但它们会导致每个按键事件出现大量延迟/卡顿。 (在频繁发送时尤其明显)

    为了解决这个问题,我找到了一种使用node-ffi-napi 直接调用Windows user32 SendInput 函数的方法:https://stackoverflow.com/a/50412529/2441655

    至少在我的情况下,这实现了更好的性能。 (当然,缺点是它只能在 Windows 上运行)

    【讨论】:

      【解决方案5】:

      回复@Venryx。他们是对的,robotjs 会有延迟,特别是如果您必须先加载节点,但是,如果您已经加载了节点,则可能值得尝试

      robot.setKeyboardDelay(0)
      

      延迟的默认设置是 10 毫秒。这对我帮助很大。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 2016-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        相关资源
        最近更新 更多