一、项目背景与选型思路

去年接了个私活:帮一家电商公司做竞品价格监控。需求很简单——每天获取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本地OCR60%免费
百度/腾讯/阿里OCR API95%按次收费❌需外网❌图片上云
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 时间线

阶段预估实际主要卡点
环境搭建2h4h路径含中文、防火墙拦截
网页获取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

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐