# nutjs-quickstart **Repository Path**: imwangshijiang/nutjs-quickstart ## Basic Information - **Project Name**: nutjs-quickstart - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-01 - **Last Updated**: 2025-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NutJS RPA 企业微信消息读取解决方案 ## 项目概述 本项目基于 [NutJS](https://github.com/nut-tree/nut-js) 开发,提供了一个完整的 RPA (机器人流程自动化) 解决方案,用于实现企业微信的消息读取功能。通过该方案,您可以自动化监控企业微信的新消息,并根据需要进行处理。 ## 环境要求 - Node.js 16+ - npm 或 yarn - 企业微信桌面版 - 支持的操作系统:Windows、macOS、Linux ## 安装说明 1. 克隆或下载本项目到本地 2. 安装依赖: ```bash # 使用 npm npm install # 或使用 yarn yarn install ``` ## 企业微信消息读取功能 ### 核心文件说明 项目中与企业微信消息读取相关的核心文件包括: - `src/wechatWorkMessageReader.js`:实现企业微信消息读取的主要逻辑 - `src/wechatWorkDemo.js`:演示如何使用消息读取器 - `src/index.js`:整合了基础模板匹配和企业微信消息监控功能 ### 使用方法 #### 方法一:通过主程序菜单 1. 运行主程序: ```bash node src/index.js ``` 2. 在终端中按 `2` 启动企业微信消息监控 #### 方法二:直接运行演示程序 ```bash node src/wechatWorkDemo.js ``` ## 实现原理 企业微信消息读取功能基于以下核心技术实现: ### 1. 模板匹配技术 使用 NutJS 的模板匹配功能来定位企业微信窗口和新消息图标: ```javascript // 定位元素示例 const region = await screen.find(needleImage, { confidence: 0.8 }); ``` ### 2. 屏幕区域抓取 通过抓取特定屏幕区域的内容来获取消息: ```javascript // 抓取消息内容区域 const messageContentScreenshot = await screen.grabRegion(new Region(x, y, width, height)); ``` ### 3. 自动化交互 使用鼠标和键盘自动化操作企业微信界面: ```javascript // 点击操作示例 await mouse.move({ x: region.x + region.width / 2, y: region.y + region.height / 2 }); await mouse.leftClick(); ``` ## 代码结构说明 ### WechatWorkMessageReader 类 该类是实现企业微信消息读取的核心,主要功能包括: - **初始化**:配置基本参数 - **定位企业微信**:通过模板匹配找到并激活企业微信窗口 - **检查新消息**:监控并识别新消息 - **消息处理**:获取消息内容并进行记录 - **持续监控**:定期检查新消息 ### 主要方法详解 #### locateAndActivateWechatWork() ```javascript async locateAndActivateWechatWork() { // 定位企业微信图标或窗口 // 点击以激活窗口 // 返回定位结果 } ``` 该方法通过模板匹配技术寻找企业微信窗口,并通过鼠标点击将其激活。 #### checkAndReadNewMessages() ```javascript async checkAndReadNewMessages() { // 查找新消息图标 // 点击查看新消息内容 // 截取消息内容区域 // 记录消息信息 // 返回新消息列表 } ``` 该方法负责检测和读取新消息,是整个功能的核心部分。 #### startMonitoring(intervalMs) ```javascript async startMonitoring(intervalMs = 5000) { // 确保企业微信已激活 // 定期检查新消息 // 处理发现的新消息 } ``` 该方法启动一个持续的监控循环,按照指定的时间间隔检查新消息。 ## 配置与自定义 ### 配置参数 您可以根据实际情况调整以下配置参数: ```javascript this.config = { wechatWorkIconTemplate: './src/assets/wechat-work-icon.png', // 企业微信图标模板 newMessageIconTemplate: './src/assets/new-message-icon.png', // 新消息图标模板 messageItemRegion: { width: 300, height: 60 }, // 消息项区域大小 messageContentRegion: { x: 300, y: 0, width: 800, height: 600 }, // 消息内容区域位置 confidenceThreshold: 0.8, // 模板匹配置信度阈值 retryAttempts: 3, // 重试次数 retryDelayMs: 1000 // 重试延迟(毫秒) }; ``` ### 自定义消息处理 您可以通过扩展 `processNewMessage` 函数来自定义消息处理逻辑: ```javascript async function processNewMessage(message) { // 保存消息截图 // 记录消息日志 // 实现自定义业务逻辑 } ``` ## 注意事项和最佳实践 1. **准备模板文件**: - 需要准备企业微信图标和新消息图标的模板文件 - 建议使用清晰、无干扰的图标截图 2. **调整区域参数**: - 根据实际屏幕分辨率和企业微信界面布局调整区域参数 - 不同版本的企业微信可能需要调整参数 3. **错误处理**: - 在生产环境中添加完善的错误处理机制 - 实现日志记录以便排查问题 4. **性能优化**: - 合理设置检查间隔,避免过于频繁的屏幕扫描 - 考虑使用更高效的模板匹配算法 5. **OCR 集成**: - 对于需要提取消息文本内容的场景,建议集成 OCR 库(如 Tesseract.js) 6. **权限问题**: - 确保程序有足够的权限访问屏幕和执行鼠标/键盘操作 - 在 macOS 上可能需要授予辅助功能权限 ## 进阶开发 ### 集成 OCR 提取文本 要提取消息文本内容,可以集成 Tesseract.js: ```bash npm install tesseract.js ``` 然后在消息处理函数中添加 OCR 逻辑: ```javascript import Tesseract from 'tesseract.js'; async function extractTextFromImage(image) { const result = await Tesseract.recognize(image, 'chi_sim+eng'); return result.data.text; } ``` ### 实现消息自动回复 结合消息读取功能,可以实现消息自动回复: ```javascript async function autoReplyToMessage(contactName, messageContent) { // 定位输入框 const inputBoxRegion = await findScreenRegion(inputBoxTemplate, 0.8); // 点击输入框并输入回复内容 await mouse.move({ x: inputBoxRegion.x + 10, y: inputBoxRegion.y + 10 }); await mouse.leftClick(); await keyboard.type(`自动回复: 已收到您的消息"${messageContent}"`); // 发送消息 await keyboard.pressKey(Key.Enter); } ``` ## 常见问题排查 1. **找不到企业微信窗口** - 检查模板文件是否正确 - 确认企业微信已打开并在前台显示 - 调整置信度阈值 2. **无法识别新消息** - 检查新消息图标的模板是否与实际显示一致 - 调整消息区域参数 3. **程序运行缓慢** - 降低模板匹配的精度 - 增加检查间隔时间 - 关闭不必要的高亮显示功能 ## 免责声明 本项目仅供学习和研究使用。使用自动化工具操作企业微信时,请遵守相关服务条款和法律法规。 ## 参考资源 - [NutJS 官方文档](https://nutjs.dev/) - [OpenCV 模板匹配](https://docs.opencv.org/4.x/d4/dc6/tutorial_py_template_matching.html)