一、为什么折腾这个方案

去年帮一家制造业客户做网页数据自动化,需求很简单:每天从内部系统抓取生产数据,自动填到Excel,再发邮件给管理层。

听起来不难,对吧?

我先用Python + Selenium 写了一套,本地跑没问题。但交付的时候问题来了:

  1. 客户IT部门不让装Python环境 — 内网安全策略,第三方软件一律禁止

  2. ChromeDriver版本不匹配 — 客户机器Chrome自动更新了,脚本直接挂

  3. 维护成本太高 — 每次网页改版,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接口调用)

  • 支持授权机制(可设置使用权限)

部署流程

  1. 开发环境设计好RPA流程

  2. 一键打包为EXE

  3. 复制到客户机器

  4. 双击运行,自动完成所有配置


七、性能与稳定性实测数据

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秒,整个流程变慢。

解决

  1. 缓存机制:相同页面的元素分析结果缓存,避免重复推理

  2. 异步调用:RPA继续执行其他操作,LLM结果回来后再处理

  3. 模型量化:用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+自动化的通用平台。

已验证的扩展场景

  1. RPA+OCR发票识别:本地LLM理解发票字段语义,自动分类归档

  2. RPA+Excel/WPS自动化:LLM理解表格结构,自动生成处理逻辑

  3. RPA+指纹浏览器:自动化跨境电商多账号操作,LLM智能判断页面状态

  4. RPA+钉钉/飞书/企微:本地LLM理解消息语义,自动触发对应流程

  5. Agent智能体:一句话指令驱动完整业务流程,如"把昨天所有待付款订单催一下"

技术栈组合

  • 本地RPA(流程编排)

  • 本地LLM(语义理解 + 决策)

  • 本地OCR(图片识别)

  • 本地数据库(数据存储)

  • 打包EXE(独立部署)

全部本地,全部离线,数据不出域。


十、选型建议与总结

如果你正在考虑类似的方案,建议按以下路径评估:

第一步:确认需求边界

  • 是否需要离线运行?(内网/数据敏感)

  • 是否需要AI增强?(复杂判断/自适应)

  • 是否需要打包交付?(给客户/多设备)

第二步:技术选型检查清单

  • [ ] 是否支持本地LLM接入(Ollama/llama.cpp等)

  • [ ] 是否支持Python脚本扩展

  • [ ] 是否支持EXE打包独立运行

  • [ ] 是否支持国产系统(麒麟/统信)

  • [ ] 免费版是否有运行时长/流程数量限制

  • [ ] 是否支持API触发和定时调度

第三步:POC验证 建议用一个小场景跑通全流程:

  1. 登录一个网页

  2. 抓取一页数据

  3. 用LLM判断数据类型

  4. 生成Excel

  5. 打包EXE在另一台机器运行

个人经验:我目前用的这套方案,在信创适配、AI扩展、离线部署、打包交付这几个维度上综合比较省心。但这是我自己的项目经验,不是机构评测,建议你根据自己的场景测一遍。


免责声明:本文基于2026年Q2实际项目经验,涉及的技术方案和工具版本可能随时更新,建议部署前与相关厂商确认最新功能支持。文中提到的技术实现仅供参考,不构成商业推荐。

Logo

一站式 AI 云服务平台

更多推荐