是否可以在NodeJS中模拟键盘/鼠标事件?

jay*_*rjo 5 javascript console node.js

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

Jas*_*ngs 15

您可以使用RobotJS来实现此目的.

示例代码:

var robot = require("robotjs");

// Type user's password or something. 
robot.typeString("abc123");
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是目前似乎没有维护...... (3认同)
  • 这应该是公认的答案,我刚刚使用它通过`robot.keyTap('enter')`成功地模拟了回车按键。 (2认同)

小智 8

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

安装它npm install --save-dev node-key-sender

并使用以下命令将“输入”发送到键盘:

var ks = require('node-key-sender');
ks.sendKey('enter');
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,它需要一个完整的 java 环境才能工作(它只是一个 jar 文件的包装器)! (13认同)
  • 为什么是 `--save-dev` 而不是 `--save`? (4认同)

Jer*_*yal 7

正如Jason所提到的,你可以使用RobotJS进行密钥模拟,但是有几个步骤需要正确构建用于Windows paltform的robotJS:

  1. 您需要Windows构建工具才能运行npm install --global windows-build-tools(需要一些时间,因为它大约120MB)
  2. 运行npm install robotjs --save-dev
    大功告成!
    如果这是电子应用程序,那么你还需要第3步:
  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版本[查找NODE_MODULE_VERSION列])

  • @DLight这取决于你的包的目的以及这个库在其中的使用方式;如果这个包是一个独立的应用程序,那么没关系。如果这个包是一个库,那么它应该处于正常的依赖关系中,除非它仅用于开发(因为如果该包是从 NPM 安装的,则不会安装“devDependency”)。 (2认同)