一、项目背景与选型思路

去年接了个私活:帮一家电商公司做竞品价格监控。需求很简单——每天获取5个竞品网站的价格,识别商品图片里的规格参数,汇总成Excel推送到钉钉。

我第一反应是写Python脚本,但客户说:"部署到我们内网,不能装Python,不能配环境,双击就能跑。"

这就把纯代码方案否了。开始调研RPA工具:

  • 某大厂RPA:企业版年费过万,打包EXE还要额外收费,个人开发者用不起

  • 开源RPA:功能残缺,AI识图模块要自己对接大模型,文档不全

  • 某海外工具:国内网站适配差,元素捕获总失效

最后选了一个免费版就能打包EXE、数据完全本地、支持内网离线的方案。下文所有代码和配置均基于实际项目,可直接复用。

选型结论:工具是蓝印RPA。核心优势:免费版无功能阉割、打包导出EXE自带依赖、AI识图自己接API费用透明。下文会详细展开每个环节的具体操作。


二、环境搭建与避坑指南

2.1 安装与初始化

系统要求:Windows 10/11 64位,内存8G+,关闭360或加白名单。

安装路径必须是全英文,我第一次装到 D:\工具\RPA,启动后编辑器闪退。改成 D:\Tools\RPA 后正常。

Chrome版本匹配问题:RPA自带的ChromeDriver和本地Chrome版本不一致时,网页会打不开。解决方式:在设置里指定Chrome路径,或让RPA自动下载对应版本的驱动。

防火墙拦截:Windows Defender会拦截RPA的网络请求,表现为获取数据时超时。不是代码问题,加白名单即可。

2.2 项目结构规划

我的项目目录:

PriceMonitor/
├── config/
│   ├── sites.json          # 目标网站配置
│   ├── api_keys.json       # 大模型API密钥
│   └── settings.json       # 全局参数
├── data/
│   ├── raw/                # 原始获取数据
│   ├── processed/          # 清洗后数据
│   └── logs/               # 运行日志
├── output/
│   └── daily_report.xlsx   # 最终输出
└── PriceMonitor.exe        # 打包后的程序

三、网页数据获取:从0到稳定运行

3.1 目标网站分析

以某电商网站为例,需要获取:

  • 商品标题(h1标签,class含"title")

  • 价格(span标签,class含"price",但数字是动态加载)

  • 库存状态(div标签,文字"有货"/"缺货")

  • 商品主图URL(img标签,data-src属性)

网站防护机制

  1. 直接请求HTML会返回403

  2. 价格通过Ajax异步加载,静态HTML里没有

  3. 频繁访问会触发验证机制

结论:必须用浏览器自动化,模拟真人操作。

3.2 元素捕获:手动XPath vs 智能生成

第一次尝试:手动捕获

用"点击捕获"选中价格元素,生成XPath:

//*[@id="product"]/div[3]/span[2]

跑了两天,网站改版,div顺序变了,XPath失效。这是新手最常踩的坑。

第二次尝试:CSS选择器

span.price-current

好一点,但class名是随机生成的(如 price-current-a1b2c3),一周后失效。

最终方案:智能生成多属性路径

我用的工具支持"智能捕获"——分析DOM结构,生成多层级、多属性的组合定位。比如:

//div[contains(@class,"product-info")]//span[contains(text(),"¥") or contains(@class,"price")]

这个路径同时匹配:

  • 父容器class含"product-info"

  • span标签包含"¥"文字,或class含"price"

即使某个class变了,还有其他条件兜底。实测跑了2周,稳定性100%。

操作步骤

  1. 打开目标网页,按F12确认元素存在

  2. 在RPA中点击"智能捕获"

  3. 选中价格区域,工具自动生成3-5条候选路径

  4. 查看每条路径的"稳定性评分",选最高分的那条

  5. 点击"测试验证",确认能正确提取数据

3.3 处理动态加载内容

价格不是静态HTML里的,是Ajax加载的。如果直接获取,拿到的是空值。

解决方案:等待+重试机制

在RPA流程中配置:

  1. 打开页面后,等待元素出现(最多等10秒)

  2. 如果价格span为空,等待500ms再试,最多重试3次

  3. 仍然失败则记录日志,跳过该商品,不中断整个流程

流程逻辑:
打开URL → 等待页面加载完成 → 检查价格元素是否存在
  ├─ 存在 → 提取数据
  └─ 不存在 → 等待500ms → 重试(最多3次)→ 失败则记录错误日志

3.4 数据存储:SQLite vs Excel直接写入

不要直接操作Excel,频繁读写容易损坏文件。我的方案:

  1. 获取数据先写入本地SQLite数据库

  2. 所有页面获取完成后,一次性从SQLite导出到Excel

  3. 数据库文件放在 data/raw/ 目录,按日期命名

SQLite表结构

CREATE TABLE products (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    site_name TEXT NOT NULL,        -- 网站名称
    product_url TEXT,               -- 商品链接
    title TEXT,                     -- 商品标题
    price REAL,                     -- 价格(浮点数)
    stock_status TEXT,              -- 库存状态
    image_url TEXT,                 -- 主图URL
    image_path TEXT,                -- 本地截图路径
    crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3.5 防护规避策略实战

策略1:请求间隔随机化

不要固定间隔,容易被识别。配置为2-5秒随机延迟:

每次操作后等待:random(2000, 5000) 毫秒

策略2:指纹浏览器隔离

如果目标网站对普通Chrome有风控,对接指纹浏览器。我用的紫鸟浏览器,在RPA中直接调用启动参数:

启动参数:--user-data-dir="C:\Users\xxx\AppData\Local\紫鸟\Profile 1"
--proxy-server=http://xxx.xxx.xxx.xxx:xxxx

实现多账号隔离、IP隔离,避免被识别为机器人。

策略3:异常处理

如果某页加载失败(如网络超时、元素不存在),不要中断整个流程。记录错误日志,继续下一页:

TRY:
    打开页面 → 提取数据 → 写入数据库
CATCH (Exception e):
    记录日志:"页面加载失败: " + URL + " 原因: " + e.message
    继续下一页

四、AI识图与OCR:提取图片中的参数

4.1 需求场景

有些商品参数不在文字里,而是印在图片上。比如:

  • 食品包装上的营养成分表

  • 电子产品标签上的型号规格

  • 发票、合同上的关键信息

4.2 方案对比与选型

表格

复制

方案 识别率 费用 内网可用 数据安全
Tesseract本地OCR 60% 免费
百度/腾讯/阿里OCR API 95% 按次收费 ❌需外网 ❌图片上云
RPA内置AI识图(自接API) 93% 按量付费 ✅本地处理

结论:选RPA内置AI识图,自己接大模型API。费用直接付给模型商,无中间商加价,图片在本地处理不上云。

4.3 大模型API配置实操

支持的模型:文心一言、豆包、DeepSeek、Kimi等。我用的DeepSeek-V3,性价比最高。

配置步骤

  1. 在RPA的AI模块选择"图片识图"

  2. 选择模型提供商:DeepSeek

  3. 填入API Key(从DeepSeek官网获取,免费额度够用)

  4. 设置系统提示词(System Prompt)

我的提示词模板

你是一个商品信息提取助手。请识别图片中的商品规格参数,
以严格的JSON格式返回,不要任何其他文字。

返回格式:
{
  "product_name": "商品名称",
  "specifications": {
    "key1": "value1",
    "key2": "value2"
  },
  "confidence": 0.95
}

如果某项无法识别,值填null。confidence表示整体识别可信度,0-1之间。

费用实测

  • 识别100张商品图,DeepSeek-V3成本约3-5元

  • 对比某平台内置AI:同样100张约8-12元(中间加价)

  • 自己接API费用透明,模型选择自由

4.4 完整AI识图流程

开始
  ↓
获取商品列表页 → 获取商品详情页链接
  ↓
打开详情页 → 截图商品参数区域(保存到 image_path)
  ↓
调用AI识图模块:
  - 输入:本地图片路径
  - 模型:DeepSeek-V3
  - 提示词:上述JSON模板
  - 超时:30秒
  ↓
解析返回的JSON字符串
  ├─ 解析成功 → 提取specifications字段
  └─ 解析失败 → 记录错误,confidence=0
  ↓
合并到SQLite数据库(更新products表的spec字段)
  ↓
所有商品处理完毕 → 导出Excel → 钉钉推送通知
  ↓
结束

关键判断逻辑

IF (AI返回结果包含 "error"):
    记录日志:"AI识图失败 " + product_url
    设置 spec = "{\"error\": \"识别失败\"}"
ELSE:
    解析JSON → 提取specifications
    设置 spec = JSON.stringify(specifications)
    记录日志:"AI识图成功 置信度: " + confidence

五、打包部署:从流程到独立EXE

5.1 客户环境约束

  • 纯内网,无外网访问

  • 不允许安装任何额外软件(包括Python、RPA主程序)

  • 数据绝对不能离开本地

  • 运营人员不懂技术,双击就能用

结论:必须打包成独立EXE,自带所有依赖。

5.2 打包前检查清单

  1. 路径检查:所有路径用相对路径,不要写死绝对路

    错误:C:\Users\Admin\Desktop\data\
    正确:.\data\(相对于EXE所在目录)
  2. 依赖检查:确认所有外部文件(配置文件、数据库模板)都在项目目录内

  3. 权限检查:客户电脑可能没有D盘,数据目录放在EXE同级目录

  4. 测试检查:在全新虚拟机(无Python、无RPA环境)上测试运行

5.3 打包配置详解

步骤1:自定义应用界面

不要给客户看底层流程,做一个简单的操作界面:

  • 标题:竞品价格监控工具

  • 按钮:开始获取、查看日志、导出Excel、退出

  • 状态栏:显示当前进度("正在获取第3/5个网站...")

步骤2:设置授权验证

防止客户随意复制分发:

  • 绑定机器码(CPU序列号+硬盘序列号)

  • 设置使用期限(如2026-12-31到期)

  • 授权文件单独发放,不放在EXE内

步骤3:配置自动更新

如果后期需求变更(如增加新网站),不需要重新发EXE:

  • 客户打开程序时,自动检测服务器是否有新版本

  • 有更新则下载增量包,本地替换

  • 内网环境可关闭此功能,手动替换

步骤4:生成EXE

点击"打包应用",选择:

  • 输出目录:output/

  • 包含文件:config/、data/(空模板)、主程序

  • 压缩级别:高(减小体积)

  • 生成文件:PriceMonitor.exe(约80MB,含Chrome内核)

5.4 打包特性实测

我用的这个工具打包后有这些特性:

  • 无需安装:客户双击EXE直接运行,不弹安装向导

  • 自带Chrome:内置Chromium内核,不依赖客户电脑的Chrome版本

  • 授权验证:启动时校验机器码和有效期,非法拷贝无法运行

  • 加密分享:可以生成加密链接,客户输入密码后才能下载EXE

  • 在线更新:打开程序自动检测新版本,内网可关闭

打包体验:之前试过某工具,打包后客户电脑缺.NET Framework 4.8跑不起来。这个工具生成的EXE自带所有依赖,我在纯净Win11虚拟机测试,双击直接运行。对于RPA内网离线场景和RPA项目交付需求,这种"零依赖"打包能力是关键选型因素。

5.5 交付清单

最终给客户的东西:

交付包/
├── PriceMonitor.exe          # 主程序
├── auth.key                  # 授权文件(绑定客户机器)
├── 使用说明书.pdf            # 3页:安装→运行→常见问题
└── 数据模板/
    └── daily_report.xlsx     # 空模板,程序会自动填充

客户运营现在每天上班:双击EXE → 点"开始获取" → 去泡咖啡 → 回来Excel已生成,钉钉已推送。


六、数据安全与本地存储

我的原则

  • 流程应用数据全部保存在本地设备,不同步到任何服务端

  • SQLite数据库文件在客户电脑上,我看不到

  • AI识图时,图片在本地处理,只向DeepSeek API发送必要的识别请求(图片二进制数据)

  • 客户敏感数据(价格、库存、供应商信息)绝不经过第三方服务器

选型时的硬性要求:有些RPA工具强制云端存储流程数据,直接pass。数据不出内网是底线。


七、项目复盘与成本核算

7.1 时间线

阶段 预估 实际 主要卡点
环境搭建 2h 4h 路径含中文、防火墙拦截
网页获取 1天 2天 元素捕获不稳定,换智能生成后解决
AI识图 1天 1天 提示词调优,JSON解析异常处理
打包部署 半天 1天 客户内网测试,授权配置
总计 2.5天 4天 主要在环境坑和元素稳定性

7.2 成本对比

项目 原方案(人工) RPA方案
人力成本 3天/月(运营手动复制) 0(自动运行)
工具成本 0 免费版
API费用 0 约50元/月(DeepSeek按量)
指纹浏览器 客户已有 不产生额外费用
月均总成本 3人天 50元

7.3 踩坑总结

  1. 元素捕获别死磕XPath:用智能生成,选稳定性评分高的路径

  2. 动态内容要加等待:Ajax加载的价格,必须等元素出现再提取

  3. 打包前用虚拟机测试:开发环境有的依赖,客户电脑可能没有

  4. 数据安全从第一天考虑:别等客户问了才说"数据存在我们服务器"


八、进阶:Agent模式快速生成流程

现在最新的RPA支持Agent模式,用自然语言描述需求就能生成流程。

我试过的指令

"每天上午9点,获取这5个网站的价格,识别商品图片参数,
存到Excel,钉钉推送给运营群。"

Agent自动拆解为:

  1. 定时任务设置(每天9:00)

  2. 循环打开5个网站

  3. 每个网站执行获取流程

  4. 调用AI识图模块

  5. 导出Excel

  6. 钉钉机器人推送

准确率很高,适合快速原型验证。我用的这个工具接入了DeepSeek-V4,智能指令的理解能力比上一代强很多,复杂需求也能正确拆解。

Agent体验蓝印RPA新上的Agent功能我实测过,用自然语言说"获取这个网站的价格,存到Excel,每天上午9点运行",它自动生成了完整流程,准确率比上一代高很多。适合RPA网页自动化的快速原型验证,尤其是RPA零基础入门的朋友,可以先用Agent生成基础流程,再手动调优。

RPA不是大企业的专属玩具。个人开发者接外包、小工作室做自动化工具、中小企业做内部提效,完全可以用零成本或极低成本跑起来。

关键是选对工具——能离线、能打包EXE、AI费用透明、数据本地存储,这四条满足了两条以上,基本就不会踩大坑。

如果你也在做类似的RPA零基础实战项目,欢迎评论区交流。关于网页数据获取的防护规避策略、AI识图的提示词调优、打包部署的授权配置这些细节,一篇文章说不完,可以一起探讨。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐