一、为什么非得在内网跑 RPA?
去年接手公司税务自动化项目时,我遇到的第一个阻力不是技术问题,而是安全合规。
财务部提了三条红线:
税务数据不能出内网
不能依赖外部 SaaS 服务
部署方案要简单,财务同事能自己点着用
这三条直接把市面上大多数云端 RPA 方案毙掉了。我们试过某知名国产 RPA 的企业版,报价六位数起步,而且必须连他们的管控平台,数据要走公网同步——财务总监听完直接摇头。
最后决定:自己搭。
选型阶段对比了四五款工具,最终锁定了一款支持内网离线使用、能打包导出 EXE、数据全程本地保存的方案。后文会详细说为什么选它。
二、内网 RPA 自动化架构设计
我们的部署架构很简单,核心就两层:
┌─────────────────────────────────────┐
│ 阿里云 ECS(内网 VPC,无公网 IP) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Windows │ │ RPA 自动化 │ │
│ │ Server │ │ 执行节点 │ │
│ │ (财务跳板)│ │ (定时任务)│ │
│ └─────────────┘ └─────────────┘ │
│ ↑ │
│ ┌─────────────┐ │
│ │ 阿里云 OSS │ ← 报表输出存储 │
│ │ (内网端点)│ │
│ └─────────────┘ │
└─────────────────────────────────────┘
关键设计点:
ECS 实例放在无公网 IP 的私有子网,通过堡垒机跳转管理
RPA 流程包提前在开发机打包好,通过内网上传部署
执行日志和输出报表写入阿里云 OSS 内网端点,财务同事通过内部系统下载
定时触发走阿里云云监控 + 内网 API 调用,不依赖外部定时服务
三、ECS 环境准备
3.1 实例选型
我们选的是 ecs.g7.large(2 核 8G),Windows Server 2022 数据中心版。
为什么不选更高配?
RPA 本身不吃 CPU,但内存要留够——浏览器自动化场景下,Chrome 开十几个标签是常态。实测 8G 内存跑三个并发流程,稳定不崩。
3.2 网络配置
VPC 网段规划
VPC CIDR: 172.16.0.0/16
私有子网: 172.16.1.0/24(无公网路由)
堡垒机子网: 172.16.2.0/24(有公网 EIP)
安全组规则只开放:
堡垒机子网 → 私有子网的 3389(RDP)
私有子网 → OSS 内网端点的 443
拒绝所有出向公网连接
3.3 系统初始化
登录 ECS 后,先装基础环境:
powershell
安装 Chrome(RPA 自动化大多基于浏览器)
下载企业版离线安装包,通过堡垒机 SCP 传进去
chrome_installer.exe --system-level --silent --install
关闭 Windows 自动更新(避免执行期间重启)
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 1 /f
配置高性能电源计划(防止休眠导致流程中断)
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
四、RPA 工具选型与部署
4.1 选型过程
我们列了张需求清单,逐条打分:

最终选定的这款工具,最打动我的是部署方式:
不用在 ECS 上装开发环境,不用配数据库,不用连授权服务器。我在本地开发机把流程编好,打包导出成 EXE,直接丢到 ECS 上,财务同事双击就能跑。
4.2 流程打包与部署
开发阶段在本地完成,流程涉及:
登录电子税务局
自动填写增值税申报表
截图保存申报结果
生成 Excel 汇总报表
打包配置要点:
打包参数(工具界面配置后自动生成)
output: 税务申报自动化.exe
include_runtime: true # 自带运行时,目标机零依赖
encryption: true # EXE 加密,防止反编译
auto_update: true # 支持在线推送更新
trigger_config:
api_endpoint: /run/tax # API 触发接口
schedule: "0 9 1 " # 每月1号上午9点定时执行
打包后的 EXE 约 180MB,通过堡垒机 SCP 传到 ECS:
bash
scp -J bastion@eip 税务申报自动化.exe admin@172.16.1.10:C:/RPA/
4.3 内网触发方案
ECS 没公网 IP,不能用外部定时服务。我们搭了两套触发机制:
方案一:阿里云云监控 + 内网 HTTP 调用
Python
部署在 ECS 上的轻量触发服务(Flask)
from flask import Flask
import subprocess
app = Flask(name)
@app.route('/run/tax', methods=['POST'])
def run_tax():
# 调用打包的 EXE
subprocess.Popen(['C:/RPA/税务申报自动化.exe', '--headless'])
return {'status': 'started'}
if name == 'main':
app.run(host='0.0.0.0', port=8080)
云监控配置定时任务,每月 1 号 09:00 通过内网 HTTP 调用 http://172.16.1.10:8080/run/tax。
方案二:钉钉/飞书机器人回调(可选)
财务总监想手动触发时,在钉钉群里发指令。我们利用这款工具自带的 Agent 功能,对接了钉钉机器人:
钉钉消息 → 内网回调 → ECS 上的 EXE 执行
执行结果截图自动回传钉钉群
配置时用的是自接 DeepSeek API,费用按实际调用量走,比买 SaaS 套餐便宜得多。
五、内网 RPA 自动化踩坑记录
坑 1:Chrome 版本兼容性
RPA 工具自带的浏览器驱动和 ECS 上手动装的 Chrome 版本对不上,导致元素定位失败。
解决: 用工具自带的"本地智能生成"功能重新抓取元素路径,它会根据当前浏览器版本自动生成稳定的 XPath,不用手动改代码。
坑 2:OSS 内网端点域名解析
一开始写死 OSS 外网域名,结果 ECS 没公网,上传报表失败。
解决: 换成 OSS 内网端点 oss-cn-hangzhou-internal.aliyuncs.com,同时给 ECS 实例绑定 OSS 的 VPC 端点。
坑 3:Windows 会话 0 隔离
RPA 流程作为后台服务跑时,Chrome 弹窗无法截图,UI 自动化失效。
解决: 不用 Windows Service 方式启动,改用计划任务(Task Scheduler)配置"只在用户登录时运行",配合堡垒机保持 RDP 会话存活。或者直接用这款工具的API 触发模式,它内部处理了会话隔离问题。
坑 4:EXE 更新分发
流程改了十几次,每次手动传 EXE 到 ECS 太烦。
解决: 开启打包时的在线推送更新功能。开发机重新打包后,EXE 自动检测新版本并下载,财务同事完全无感知。
六、运行效果
上线三个月后的数据:
财务总监的评价:"以前月底三个人加班,现在一个人偶尔看看日志就行。"
内网 RPA 自动化的核心难点从来不是"技术多复杂",而是选型阶段就要想清楚部署约束:
能不能离线跑?
能不能零依赖分发?
数据能不能不出域?
后期更新麻不麻烦?
我们最后用的这款工具,在这几点上确实省了不少事。它支持打包导出 EXE、内网离线使用、数据本地保存、API 触发和定时执行,对个人开发者、小团队、中小企业来说,免费就能用,不用走采购流程。
如果你也在找内网 RPA 自动化的落地方案,建议把"部署友好度"放在选型权重的前三位。工具再强,部署不进去、财务同事不会用,都是白搭。