UNPKG

unicorn-rpa

Version:

🦄 Unicorn RPA - 强大的跨域iframe自动化控制工具

256 lines (195 loc) 6.87 kB
# 🦄 Unicorn RPA 强大的跨域iframe自动化控制工具 ## 新功能:接口响应捕获 ### 1. clickAndWaitForResponse - 点击并等待接口响应 这个动作会点击指定元素,然后等待并捕获可能触发的接口响应。 ```javascript // 示例:点击提交按钮并等待接口响应 { "type": "clickAndWaitForResponse", "selector": ".submit-btn", "timeout": 10000, // 可选,默认10秒超时 "delay": 1000 // 可选,动作完成后的延迟 } ``` ### 2. waitForApiResponse - 等待接口响应 这个动作会等待并捕获接口响应,通常与 `click` 动作配合使用。 ```javascript // 示例:先点击按钮,再等待接口响应 [ { "type": "click", "selector": ".submit-btn" }, { "type": "waitForApiResponse", "timeout": 10000, // 可选,默认10秒超时 "delay": 1000 // 可选,动作完成后的延迟 } ] ``` ### 响应数据格式 当捕获到接口响应时,会在 `results` 数组中添加以下格式的数据: ```javascript // 成功响应 { "type": "apiResponse", "selector": ".submit-btn", // clickAndWaitForResponse 包含 "data": { "type": "fetch", // "xmlhttprequest" "url": "https://api.example.com/submit", "status": 200, "statusText": "OK", "responseText": "{\"success\": true, \"message\": \"提交成功\"}", "headers": { "content-type": "application/json", "cache-control": "no-cache" } } } // 请求失败 { "type": "apiError", "selector": ".submit-btn", // clickAndWaitForResponse 包含 "error": "NetworkError: Failed to fetch" } // 等待超时 { "type": "apiTimeout", "selector": ".submit-btn", // clickAndWaitForResponse 包含 "message": "等待接口响应超时" } ``` ### 使用场景 1. **表单提交验证**:点击提交按钮后验证接口返回结果 2. **数据加载确认**:点击加载按钮后确认数据是否正确返回 3. **操作结果验证**:执行操作后验证接口响应是否符合预期 4. **错误处理**:捕获接口错误并进行相应处理 ### 注意事项 - 支持 `fetch` `XMLHttpRequest` 两种请求方式 - 会自动恢复原始的请求方法,不会影响页面正常功能 - 响应文本会被完整记录,但日志中只显示前500个字符 - 超时时间可配置,默认10秒 - 可以捕获请求头信息 ## 原有功能 ## 简介 **unicorn-rpa** 是一个基于 postMessage 的跨域 iframe 自动化控制工具,支持多种 UI 自动化操作,适用于前端页面自动化测试、RPA 机器人、跨系统表单自动填充等场景。 - 支持多种常见 UI 操作(输入、点击、选择、滚动、批量勾选等) - 支持跨域 iframe 自动化 - 内置安全校验(来源白名单、频率限制、动作类型校验、加密认证) - 易于集成到 Vue/React/原生项目 --- ## 安装 ```bash npm install unicorn-rpa # 或 pnpm add unicorn-rpa # 或 yarn add unicorn-rpa ``` --- ## 主要特性 - **自动化动作丰富**:支持 fill、select、click、doubleClick、rightClick、hover、scroll、screenshot、waitFor、wait、treeSelect、checkAllCheckboxes、getText、getValue - **安全机制完善**: - 来源域名白名单 - 消息频率限制(每10秒同一来源只能发一次) - 动作类型白名单 - AES+SHA256 加密认证(auth 字段) - **高兼容性**:兼容主流浏览器和 Node.js 注入场景 - **可扩展**:支持自定义动作扩展 --- ## 快速上手 ### 1. 发送端(前端/Node) ```js import CryptoJS from 'crypto-js'; const AUTH_AES_KEY = 'unicorn-rpa-2024-very-secret-key-1234'; // 与接收端一致 const authPlain = '优霓空(重庆)科技有限公司'; const authEncrypted = CryptoJS.AES.encrypt(authPlain, AUTH_AES_KEY).toString(); const fillData = { auth: authEncrypted, iframeSelector: '#targetFrame', actions: [ { type: 'fill', selector: '.input', value: 'hello', delay: 500 }, { type: 'click', selector: '.btn', delay: 500 } ] }; const iframe = document.getElementById('targetFrame'); iframe.contentWindow.postMessage(fillData, '*'); ``` ### 2. 接收端(iframe页面/目标页面) 在目标页面引入 unicorn-rpa 并初始化: ```js const injectRPA = require('unicorn-rpa'); injectRPA(); ``` --- ## 动作类型说明 | type | 说明 | |---------------------|------------------| | fill | 文本输入 | | select | 下拉选择 | | click | 点击 | | doubleClick | 双击 | | rightClick | 右键点击 | | hover | 悬停 | | scroll | 滚动 | | screenshot | 截图 | | waitFor | 等待元素出现 | | wait | 等待固定时长 | | treeSelect | 树形选择 | | checkAllCheckboxes | 批量勾选复选框 | | getText | 获取文本 | | getValue | 获取值 | --- ## 安全机制 1. **auth 加密认证** - 发送方用 AES 密钥加密明文(如公司名),生成 `auth` 字段 - 接收方用同样密钥解密后做 SHA256 hash,与本地 hash 匹配才通过 2. **来源白名单** - 只允许配置的域名来源的消息 3. **频率限制** - 同一来源每10秒只能发一次消息 4. **动作类型白名单** - 只允许预设的动作类型 --- ## 配置说明 ### 1. 安全配置(unicorn-rpa/src/utils/security.js) ```js const SECURITY_CONFIG = { ALLOWED_ORIGINS: [ 'http://localhost:5000', 'http://localhost:5173', 'http://localhost:8080', 'http://127.0.0.1:5000', 'http://127.0.0.1:5173', 'http://127.0.0.1:8080' ], RATE_LIMIT: { INTERVAL: 10000 // 10 } }; ``` ### 2. AUTH 密钥和 hash - 推荐用环境变量或外部配置文件隐藏密钥和 hash - 例: ```js const AUTH_AES_KEY = process.env.AUTH_AES_KEY; const AUTH_HASH = process.env.AUTH_HASH; ``` --- ## 常见问题 FAQ **Q: 为什么我的消息被拒绝?** - 检查来源域名是否在白名单 - 检查发送频率是否过快 - 检查动作类型是否支持 - 检查 auth 字段是否加密且密钥一致 **Q: 如何自定义动作?** - 可在 unicorn-rpa/src/actions/index.js 中扩展 actionHandlers **Q: 如何调试安全校验?** - 控制台会输出详细的安全警告和失败原因 --- ## 贡献与反馈 如需定制功能、发现 bug 或有建议,欢迎 issue PR。 --- ## License MIT