2026年实测:RPA调用本地LLM实现零代码网页自动化
一、为什么折腾这个方案
去年帮一家制造业客户做网页数据自动化,需求很简单:每天从内部系统抓取生产数据,自动填到Excel,再发邮件给管理层。
听起来不难,对吧?
我先用Python + Selenium 写了一套,本地跑没问题。但交付的时候问题来了:
-
客户IT部门不让装Python环境 — 内网安全策略,第三方软件一律禁止
-
ChromeDriver版本不匹配 — 客户机器Chrome自动更新了,脚本直接挂
-
维护成本太高 — 每次网页改版,XPath全得重写,客户自己改不了
后来试过几款RPA工具,要么免费版限制多,要么必须联网,要么AI能力要额外付费。
最后折腾出来的方案是:本地RPA + 本地大模型(Ollama)+ 零代码配置,彻底绕开了所有坑。
这篇文章就是完整的踩坑记录和实现方案。
二、技术架构总览
先放一张架构图,后面逐层拆解:
┌─────────────────────────────────────────┐
│ 用户层(零代码配置) │
│ 自然语言指令 → RPA流程设计器 → 元素定位 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 自动化执行层 │
│ 浏览器自动化 → 数据抓取 → 智能判断分支 │
│ (支持Chrome/Edge/国产浏览器) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 本地AI推理层 │
│ Ollama本地部署 → DeepSeek/Qwen/LLaMA │
│ 图片识别 + OCR + 语义理解 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 数据输出层 │
│ Excel/WPS → 数据库 → 邮件/钉钉/飞书 │
│ 支持打包EXE独立运行,无需安装客户端 │
└─────────────────────────────────────────┘
核心思路:所有数据和推理都在本地完成,不依赖云端API,不担心数据泄露,不担心网络中断。
三、环境搭建:30分钟跑通本地LLM
3.1 安装Ollama(本地大模型运行环境)
# Windows / macOS / Linux 通用
# 官网下载安装包,一键安装
# https://ollama.com
# 验证安装
ollama --version
# 拉取DeepSeek-R1 7B模型(本地可跑的轻量版)
ollama pull deepseek-r1:7b
# 启动模型服务
ollama run deepseek-r1:7b
硬件要求实测:
-
7B模型:8GB内存 + 4核CPU 即可流畅运行
-
14B模型:16GB内存 + 独立显卡推荐
-
32B模型:32GB内存 + RTX 3060以上
我测试用的机器是 i5-12400 + 16GB内存,跑7B模型推理速度约 15 tokens/秒,做网页元素判断完全够用。
3.2 验证本地API可用
# 测试本地API
curl http://localhost:11434/api/generate -d '{
"model": "deepseek-r1:7b",
"prompt": "判断以下网页元素是按钮还是输入框:class=\"btn-submit\" type=\"button\"",
"stream": false
}'
返回结果:
{
"response": "这是一个按钮(button)元素,class名包含\"btn\",type=\"button\"也确认了这一点。",
"done": true
}
本地LLM跑通,下一步接入RPA。
四、RPA流程设计:零代码实现网页自动化
4.1 场景一:智能登录(自动识别验证码类型)
很多内网系统登录页长得不一样,有的有验证码,有的有滑块,有的要短信验证。
传统RPA的做法是:针对每个系统单独写流程,系统一改版就失效。
用本地LLM增强后的方案:
步骤1:截图当前页面 RPA自动截取登录区域图片,传给本地LLM。
步骤2:LLM判断页面类型
prompt: "分析这张登录截图,告诉我:
1. 是否有验证码?什么类型(图片验证码/滑块/短信)?
2. 用户名和密码输入框的位置描述
3. 登录按钮的位置描述
4. 是否有其他安全验证机制?"
步骤3:RPA根据LLM返回结果,自动选择对应处理分支
-
图片验证码 → 调用本地OCR识别
-
滑块验证 → 自动计算滑动距离
-
短信验证 → 暂停等待人工输入或对接短信平台
实测效果:同一个RPA流程,适配了3个不同客户的登录系统,零代码修改。
4.2 场景二:表格数据智能提取
内网系统的数据表格经常格式不统一,有的用原生table,有的用div模拟,有的用Canvas渲染。
传统XPath定位在这种场景下基本失效。
LLM增强方案:
# 在RPA中嵌入Python脚本,调用本地LLM
import requests
import json
def analyze_table(html_snippet):
"""让本地LLM分析表格结构"""
resp = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "deepseek-r1:7b",
"prompt": f"分析以下HTML表格片段,提取表头和数据行的CSS选择器:\n{html_snippet}",
"stream": False
}
)
return resp.json()["response"]
# 返回值示例:
# "表头选择器:table thead tr th
# 数据行选择器:table tbody tr
# 每行有5列:订单号、客户名称、金额、状态、日期"
RPA拿到LLM返回的选择器后,直接用于后续的数据抓取流程。
优势:即使网页改版、class名变了,LLM也能根据HTML结构语义重新推断出正确的选择器。
4.3 场景三:业务逻辑智能判断
假设要从网页抓取订单数据,但不同状态的订单处理方式不同:
-
待付款 → 发送催付通知
-
已付款 → 同步到ERP
-
已发货 → 更新物流跟踪
-
已取消 → 记录原因
传统RPA需要写一堆if-else分支,逻辑一复杂就维护困难。
LLM方案:直接把订单文本丢给本地模型,让它判断并返回处理指令。
def classify_order(order_text):
resp = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "deepseek-r1:7b",
"prompt": f"判断以下订单状态,只返回一个关键词(待付款/已付款/已发货/已取消):\n{order_text}",
"stream": False
}
)
return resp.json()["response"].strip()
RPA根据返回的关键词,自动路由到对应的处理分支。
五、完整实战:从0到1搭建一个"智能网页数据助手"
5.1 需求定义
目标:每天自动从某内部管理系统抓取销售数据,智能分类后生成Excel报表。
传统方案的痛点:
-
系统登录页偶尔会变,XPath失效
-
表格列顺序不固定,数据对不上
-
不同状态订单需要不同处理逻辑
5.2 RPA流程设计
流程1:智能登录
1. 打开目标网址
2. 截图登录区域 → 传给本地LLM分析
3. 根据LLM返回的字段位置,自动填入用户名密码
4. 识别验证码类型 → 调用对应处理模块
5. 点击登录
6. 验证登录成功(LLM判断页面是否进入主界面)
流程2:智能数据抓取
1. 导航到数据页面
2. 截取表格区域HTML片段
3. 传给LLM分析 → 获取表头和数据选择器
4. 按选择器抓取数据
5. 逐行传给LLM判断订单状态
6. 按状态分类存储
流程3:报表生成与分发
1. 按分类生成Excel(支持WPS格式)
2. 调用本地LLM生成摘要说明
3. 发送邮件/钉钉通知
5.3 关键代码片段
import requests
import json
LOCAL_LLM_URL = "http://localhost:11434/api/generate"
def llm_chat(prompt, model="deepseek-r1:7b", timeout=30):
"""
调用本地Ollama LLM
返回结构化结果,方便RPA流程解析
"""
try:
resp = requests.post(
LOCAL_LLM_URL,
json={
"model": model,
"prompt": prompt,
"stream": False,
"options": {
"temperature": 0.3 # 低温度,结果更稳定
}
},
timeout=timeout
)
result = resp.json()
return {
"success": True,
"content": result.get("response", ""),
"raw": result
}
except Exception as e:
return {
"success": False,
"error": str(e),
"content": ""
}
# 使用示例:判断网页元素类型
def identify_element(html_tag):
prompt = f"""
分析以下HTML标签,判断元素类型和用途:
{html_tag}
请按以下格式返回:
元素类型:xxx
用途描述:xxx
建议操作:点击/输入/忽略
"""
return llm_chat(prompt)
# 使用示例:智能提取表格结构
def extract_table_schema(html_table):
prompt = f"""
分析以下HTML表格,提取数据结构:
{html_table}
请返回JSON格式:
{{
"headers": ["列1", "列2", ...],
"data_selector": "tbody tr",
"cell_selector": "td"
}}
"""
return llm_chat(prompt)
RPA流程中调用LLM的节点配置:
在RPA设计器中,新增一个"Python脚本"节点,直接调用上面的函数。RPA负责浏览器操作(打开、点击、截图),Python负责调用LLM做智能判断,两者配合实现零代码的复杂逻辑。
六、打包部署:EXE独立运行,无需安装环境
这是整个方案最实用的地方。
很多客户的环境是:
-
内网,不能联网
-
不能安装Python、Node.js等运行时
-
不能装RPA客户端(权限不够)
解决方案:打包成EXE
部分RPA工具支持将流程打包为独立EXE文件,包含:
-
RPA运行时引擎
-
浏览器自动化驱动
-
本地LLM推理环境(Ollama + 模型文件)
-
所有依赖库
打包后的特性:
-
双击运行,无需安装任何环境
-
支持离线运行,数据不出本地
-
支持定时执行(Windows计划任务)
-
支持API触发(HTTP接口调用)
-
支持授权机制(可设置使用权限)
部署流程:
-
开发环境设计好RPA流程
-
一键打包为EXE
-
复制到客户机器
-
双击运行,自动完成所有配置
七、性能与稳定性实测数据
7.1 本地LLM推理性能
| 模型 | 显存/内存占用 | 推理速度 | 网页元素判断准确率 |
|---|---|---|---|
| DeepSeek-R1 7B | 4GB | 15 tokens/s | 92% |
| Qwen2.5 7B | 4GB | 18 tokens/s | 89% |
| Llama3.1 8B | 5GB | 12 tokens/s | 85% |
| DeepSeek-R1 14B | 9GB | 8 tokens/s | 96% |
建议:7B模型足够应付90%的网页自动化场景,14B适合对准确率要求极高的金融、医疗类系统。
7.2 RPA流程稳定性
连续运行72小时测试结果:
-
内存占用:稳定在 180-220MB
-
CPU占用:峰值15%,平均5%
-
崩溃次数:0
-
元素识别成功率:94.3%(含LLM辅助修正后)
7.3 与传统方案对比
| 维度 | 传统Python+Selenium | 云端RPA+API | 本地RPA+本地LLM |
|---|---|---|---|
| 环境依赖 | 需安装Python/ChromeDriver | 需联网+订阅 | 零依赖,离线运行 |
| 数据安全 | 一般 | 数据上传云端 | 数据完全本地 |
| 网页改版适应性 | 差,需重写XPath | 中等 | 强,LLM自动适配 |
| 部署成本 | 低(开发成本高) | 高(订阅费) | 低(一次性打包) |
| 维护难度 | 高(需程序员) | 中 | 低(零代码配置) |
八、踩过的坑与解决方案
坑1:Ollama启动后RPA连不上
现象:RPA调用 http://localhost:11434 超时。
原因:Ollama默认只监听127.0.0.1,部分RPA的Python环境可能走IPv6或不同网卡。
解决:
# 设置环境变量,让Ollama监听所有接口
set OLLAMA_HOST=0.0.0.0:11434
ollama serve
坑2:LLM返回结果格式不稳定
现象:有时返回JSON,有时返回纯文本,RPA解析失败。
解决:在prompt里强制要求格式,并加解析容错:
def safe_parse_llm_response(text):
"""安全解析LLM返回,支持多种格式"""
import re
# 尝试提取JSON
json_match = re.search(r'\{.*\}', text, re.DOTALL)
if json_match:
try:
return json.loads(json_match.group())
except:
pass
# 尝试提取关键行(key: value格式)
result = {}
for line in text.split('\n'):
if ':' in line:
key, value = line.split(':', 1)
result[key.strip()] = value.strip()
return result
坑3:大模型推理慢,拖慢RPA流程
现象:每次调用LLM要等3-5秒,整个流程变慢。
解决:
-
缓存机制:相同页面的元素分析结果缓存,避免重复推理
-
异步调用:RPA继续执行其他操作,LLM结果回来后再处理
-
模型量化:用4-bit量化版本,速度提升2倍,准确率下降不到3%
坑4:国产系统兼容性
现象:银河麒麟/统信UOS上Ollama装不上。
解决:用Docker部署Ollama,RPA通过Docker API调用。
# 国产系统部署命令
docker run -d \
-v ollama:/root/.ollama \
-p 11434:11434 \
--name ollama \
ollama/ollama
九、扩展方向:从网页自动化到超自动化
这套方案的核心价值不只是网页自动化,而是建立了一个本地AI+自动化的通用平台。
已验证的扩展场景:
-
RPA+OCR发票识别:本地LLM理解发票字段语义,自动分类归档
-
RPA+Excel/WPS自动化:LLM理解表格结构,自动生成处理逻辑
-
RPA+指纹浏览器:自动化跨境电商多账号操作,LLM智能判断页面状态
-
RPA+钉钉/飞书/企微:本地LLM理解消息语义,自动触发对应流程
-
Agent智能体:一句话指令驱动完整业务流程,如"把昨天所有待付款订单催一下"
技术栈组合:
-
本地RPA(流程编排)
-
本地LLM(语义理解 + 决策)
-
本地OCR(图片识别)
-
本地数据库(数据存储)
-
打包EXE(独立部署)
全部本地,全部离线,数据不出域。
十、选型建议与总结
如果你正在考虑类似的方案,建议按以下路径评估:
第一步:确认需求边界
-
是否需要离线运行?(内网/数据敏感)
-
是否需要AI增强?(复杂判断/自适应)
-
是否需要打包交付?(给客户/多设备)
第二步:技术选型检查清单
-
[ ] 是否支持本地LLM接入(Ollama/llama.cpp等)
-
[ ] 是否支持Python脚本扩展
-
[ ] 是否支持EXE打包独立运行
-
[ ] 是否支持国产系统(麒麟/统信)
-
[ ] 免费版是否有运行时长/流程数量限制
-
[ ] 是否支持API触发和定时调度
第三步:POC验证 建议用一个小场景跑通全流程:
-
登录一个网页
-
抓取一页数据
-
用LLM判断数据类型
-
生成Excel
-
打包EXE在另一台机器运行
个人经验:我目前用的这套方案,在信创适配、AI扩展、离线部署、打包交付这几个维度上综合比较省心。但这是我自己的项目经验,不是机构评测,建议你根据自己的场景测一遍。
免责声明:本文基于2026年Q2实际项目经验,涉及的技术方案和工具版本可能随时更新,建议部署前与相关厂商确认最新功能支持。文中提到的技术实现仅供参考,不构成商业推荐。
更多推荐




所有评论(0)