robotjs
robotjs 是一个用于 Node.js 的跨平台库,它允许你在桌面环境中模拟鼠标、键盘操作,以及获取屏幕信息等。 它的原理是将 c++ 的库编译成 node 的模块,所以需要提前准备好 c++ 的编译环境。
安装
使用 npm 进行安装:
bash
npm install robotjs注意
在不同的平台需要提前准备好 robotjs 需要的依赖环境,否则无法安装。请在安装前确保你已拥有所需的依赖项:
- Windows
- windows-build-tools npm 包 (从提升权限的 PowerShell 或 CMD.exe 运行 npm install --global --production windows-build-tools)。
- Mac
- Xcode 命令行工具。
- Linux
- Python(建议使用 v2.7,v3.x.x 不被支持)。
- make。
- 像 GCC 这样的 C/C++ 编译器。
- libxtst-dev 和 libpng++-dev (sudo apt-get install libxtst-dev libpng++-dev)。
robotjs 的常用 API 及使用方法
鼠标操作
- 移动鼠标
- API:
robot.moveMouse(x, y) - 参数:
x和y是鼠标要移动到的屏幕坐标。 - 示例:
- API:
javascript
const robot = require('robotjs');
// 将鼠标移动到屏幕坐标 (100, 100)
robot.moveMouse(100, 100);- 平滑移动鼠标
- API:
robot.moveMouseSmooth(x, y) - 参数:
x和y是鼠标要移动到的屏幕坐标,该方法会平滑地移动鼠标。 - 示例:
- API:
javascript
const robot = require('robotjs');
// 平滑地将鼠标移动到屏幕坐标 (200, 200)
robot.moveMouseSmooth(200, 200);- 鼠标点击
- API:
robot.mouseClick(button, double) - 参数:
button可选值为'left'、'right'或'middle',默认为'left';double为布尔值,表示是否为双击,默认为false。 - 示例:
- API:
javascript
const robot = require('robotjs');
// 鼠标左键单击
robot.mouseClick();
// 鼠标右键双击
robot.mouseClick('right', true);- 按下鼠标按钮
- API:
robot.mouseToggle(down, button) - 参数:
down为字符串,down表示按下,up表示释放;button可选值为'left'、'right'或'middle',默认为'left'。 - 示例:
- API:
javascript
const robot = require('robotjs');
// 按下鼠标左键
robot.mouseToggle(true);
// 释放鼠标左键
robot.mouseToggle(false);- 获取鼠标位置
- API:
robot.getMousePos() - 返回值:返回一个包含
x和y属性的对象,表示鼠标当前的屏幕坐标。 - 示例:
- API:
javascript
const robot = require('robotjs');
const mousePos = robot.getMousePos();
console.log(`鼠标当前位置:X: ${mousePos.x}, Y: ${mousePos.y}`);键盘操作
- 按键按下
- API:
robot.keyTap(key, modifiers) - 参数:
key是要按下的键名,如'a'、'enter'等;modifiers是一个包含修饰键的数组,如['control', 'shift']。 - 示例:
- API:
javascript
const robot = require('robotjs');
// 按下 'a' 键
robot.keyTap('a');
// 按下 Ctrl + C 组合键
robot.keyTap('c', ['control']);- 输入文本
- API:
robot.typeString(string) - 参数:
string是要输入的文本。 - 示例:
- API:
javascript
const robot = require('robotjs');
// 输入文本 "Hello, World!"
robot.typeString('Hello, World!');屏幕信息
- 获取屏幕尺寸
- API:
robot.getScreenSize() - 返回值:返回一个包含
width和height属性的对象,表示屏幕的宽度和高度。 - 示例:
- API:
javascript
const robot = require('robotjs');
const screenSize = robot.getScreenSize();
console.log(`屏幕尺寸:宽度 ${screenSize.width},高度 ${screenSize.height}`);- 获取指定像素的颜色
- API:
robot.getPixelColor(x, y) - 参数:
x和y是屏幕上像素的坐标。 - 返回值:返回一个十六进制字符串,表示该像素的颜色。
- 示例:
- API:
javascript
const robot = require('robotjs');
const color = robot.getPixelColor(100, 100);
console.log(`坐标 (100, 100) 处的像素颜色:${color}`);示例代码
通过 robotjs 实现自动截屏和获取屏幕像素
注意
需要注意的是,robotjs 的 API 都是同步代码会阻塞主线程
javascript
const robot = require('robotjs')
console.log(robot)
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const mousePos = robot.getMousePos()
const screenSize = robot.getScreenSize()
// 剪切屏幕
async function cutScreen(){
// robot.keyTap("a",["command","shift"])// 快捷键
await sleep(500)
robot.moveMouse(100,100)
await sleep(500)
robot.mouseToggle("down","left")
await sleep(500)
robot.moveMouseSmooth(200,200)
await sleep(500)
robot.mouseToggle("up","left")
}
// cutScreen()
// 获取屏幕像素点
function getScreenPixel(){
const pixs = []
for(let i = 0; i < 10; i++){
for(let j = 0; j < 10; j++){
const pixel = robot.getPixelColor(i,j)
pixs.push(pixel)
console.log(`${i*10+j}%`)
}
}
return pixs
}
const pixs = getScreenPixel()
console.log(pixs)
console.log(mousePos)
console.log(screenSize)
// robot.keyTap("a")注意事项
- 权限问题:在某些操作系统中,可能需要特定的权限才能模拟鼠标和键盘操作。例如,在 macOS 上,需要在“隐私与安全性”设置中授予应用相应的权限。
- 性能影响:频繁的鼠标和键盘模拟操作可能会影响系统性能,尤其是在进行大量循环操作时。
- 跨平台兼容性:虽然
robotjs是跨平台的,但不同操作系统对某些操作的支持可能会有所差异。在使用时,需要注意检查和处理这些差异。