想象一下,NodeJS模块在从控制台调用时会输出一些介绍性消息,然后等待用户输入(单击enter或esc)。除了 - wait-for-user-input提示之外,这个模块已经拥有并完成了我们需要的一切。所以我们想知道(我个人对NodeJS很新)是否有可能以编程方式执行控制台模块并在其上触发输入事件,这样它就不会等待并立即继续工作?
答案 0 :(得分:14)
您可以使用RobotJS来实现此目的。
示例代码:
var robot = require("robotjs");
// Type user's password or something.
robot.typeString("abc123");
答案 1 :(得分:7)
正如Jason所说,你可以使用RobotJS进行密钥模拟,但是有几个步骤需要为 Windows paltform正确构建robotJS:
npm install --global windows-build-tools
(需要一些时间,因为它大约120MB)npm install robotjs --save-dev
运行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,您可以检查节点版本here的abi版本[查找NODE_MODULE_VERSION列])
答案 2 :(得分:1)
node-key-sender库是RobotJs的替代品。它是跨平台和非常小的lib。
使用npm install --save-dev node-key-sender
安装。
并发送"输入"到键盘使用:
var ks = require('node-key-sender');
ks.sendKey('enter');
答案 3 :(得分:1)
响应@Venryx。没错,robotjs会有延迟,特别是如果您必须先加载节点,但是,如果您已经有节点加载器,则值得尝试
robot.setKeyboardDelay(0)
延迟的默认设置为10ms。这极大地帮助了我。
答案 4 :(得分:0)
我已经尝试过robotjs
和node-key-sender
,但是每个键事件会导致大量的延迟/停顿。 (尤其是在频繁发送时尤其明显)
为解决此问题,我找到了一种使用node-ffi-napi
来直接调用Windows user32 SendInput
函数的方法:https://stackoverflow.com/a/50412529/2441655
至少就我而言,这实现了更好的性能。 (但是,缺点是它只能在Windows上运行)