字节笔记本

2026年2月22日

RobotJS - Node.js 桌面自动化库

本文介绍 RobotJS,一个用于 Node.js 的桌面自动化库。它提供了控制鼠标、键盘和读取屏幕像素的功能,让开发者能够用 JavaScript 实现跨平台的桌面自动化任务。

项目简介

RobotJS 是一个开源的 Node.js 桌面自动化库,由 Jason Stallings(octalmage)开发维护。截至目前,该项目在 GitHub 上已获得 12.7k stars993 forks,主要使用 C 语言(84.5%)编写,同时包含 C++、JavaScript、Objective-C 和 Python 代码。

该项目支持 MacWindowsLinux 三大操作系统,是 AutoHotkey 在 Node.js 生态中的优秀替代品。

核心特性

  • 鼠标控制:移动鼠标位置、左/右点击、拖拽操作
  • 键盘控制:按键、长按、输入文字
  • 屏幕读取:获取屏幕像素颜色、捕获屏幕
  • 跨平台支持:一套代码同时支持 Mac、Windows、Linux
  • 原生性能:基于 C/C++ 实现,执行效率高
  • 简单易用:简洁的 JavaScript API,易于上手

技术栈

  • C (84.5%) - 核心原生模块实现
  • C++ (7.7%) - 平台特定功能封装
  • JavaScript (4.9%) - Node.js 接口层
  • Objective-C (2.4%) - macOS 平台支持
  • Python (0.5%) - 构建工具脚本

安装指南

使用 npm 安装

bash
npm install robotjs

npm 会自动下载适合你操作系统的预编译二进制文件。

从源码构建

如果你需要手动构建,请确保已安装以下依赖:

  • macOS: Xcode Command Line Tools 或 Xcode
  • Windows: Visual Studio 2013 或更高版本
  • Linux: Python、make、GCC

安装 node-gyp:

bash
npm install -g node-gyp

然后构建项目:

bash
node-gyp rebuild

快速开始

鼠标控制示例

让鼠标在屏幕上按正弦波轨迹移动:

javascript
var robot = require("robotjs");

// 设置鼠标移动延迟
robot.setMouseDelay(2);

var twoPI = Math.PI * 2.0;
var screenSize = robot.getScreenSize();
var height = (screenSize.height / 2) - 10;
var width = screenSize.width;

for (var x = 0; x < width; x++) {
    y = height * Math.sin((twoPI * x) / width) + height;
    robot.moveMouse(x, y);
}

键盘控制示例

输入文字并按下回车键:

javascript
var robot = require("robotjs");

// 输入 "Hello World"
robot.typeString("Hello World");

// 按下回车键
robot.keyTap("enter");

屏幕读取示例

获取鼠标当前位置的像素颜色:

javascript
var robot = require("robotjs");

// 获取鼠标位置
var mouse = robot.getMousePos();

// 获取像素颜色(十六进制格式)
var hex = robot.getPixelColor(mouse.x, mouse.y);

console.log("#" + hex + " at x:" + mouse.x + " y:" + mouse.y);

API 参考

完整的 API 文档请访问官方文档站:https://robotjs.io/docs/syntax

主要 API 分类

分类功能
Mouse鼠标移动、点击、滚动、拖拽
Keyboard按键、组合键、输入文字
Screen屏幕尺寸、像素颜色、截图

应用场景

RobotJS 适用于以下场景:

  1. 自动化测试 - 模拟用户操作进行 UI 测试
  2. 数据录入 - 自动化表单填写和数据输入
  3. 屏幕监控 - 监控屏幕变化、像素检测
  4. 游戏辅助 - 自动化游戏操作(需遵守游戏规则)
  5. 演示脚本 - 自动化软件演示和操作教程

注意事项

已知限制

  • 全局热键:目前不支持全局热键,建议使用 Electron 或 NW.js 实现
  • 截图功能:正在开发中,即将推出
  • 多显示器:没有显式的多显示器支持

常见问题

Q: 为什么某些键盘按键缺失? A: 按键是按需实现的,如有需要可以提交 issue 或 PR。

Q: 支持 Electron 吗? A: 支持,RobotJS 可以与 Electron 配合使用。

项目背景

开发者 Jason Stallings 是 AutoHotkey 的长期用户,AutoHotkey 在 Windows 上的图像搜索和像素相关功能非常强大。但由于工作中转而使用 Mac,他发现 Mac 上没有类似的工具,于是决定用他最喜欢的 Node.js 来开发 RobotJS。

相关项目

  • autopy - RobotJS 基于的项目
  • AutoHotkey - Windows 自动化工具

项目链接

分享: