影刀RPA新手教程:零基础保姆级教程——手把手带你做一个电商价格监控系统
我第一次做电商价格监控的时候,是为了帮老婆监控淘宝上一件大衣的价格。那时候双11快到了,想等降价了再买。
手动刷了好几天,累得不行。后来想到用影刀RPA做个自动监控系统,每天早上自动检查价格,降价了就发邮件通知我。
做完这个系统后,我发现了RPA真正的价值:把重复的人工操作变成自动化的流程。
这篇文章我会手把手带你做一个真正能用的电商价格监控系统。做完这个项目,你就能独立开发大部分数据采集类的RPA应用了。
一、认识影刀和安装配置
下载和安装
去影刀官网下载客户端。安装很简单,但要注意:一定要装64位版本。
我之前装的是32位版本,处理大Excel文件的时候老是内存不足报错。后来换成64位版本,问题就解决了。
安装完成后,安装浏览器插件。不装插件的话,影刀捕获不到网页元素。
界面介绍
影刀的界面主要分三块:
- 左侧是指令面板
- 中间是流程编辑区
- 右侧是属性面板
刚开始可能会被这么多指令吓到。其实常用的指令就那么几个:循环、If判断、获取元素、点击元素、填写输入框、Excel读写。
剩下的用到再查就行。
二、元素定位四合一
做电商价格监控,最核心的就是准确找到价格元素。
元素捕获
打开淘宝商品页面,点击"捕获新元素",然后鼠标移到价格上,变红后点击。
但淘宝的价格元素有点特殊:有时候价格是用图片显示的(比如优惠价),这种用普通捕获捕获不到。
我的处理方法是:先用普通捕获试试,如果不行,就用图像识别。
XPath的6种写法
XPath是最稳定的定位方式。做电商监控必须掌握。
- 相对路径:
//span[@class='price']—— 最常用 - 包含文本:
//span[contains(text(),'¥')]—— 找带¥符号的元素 - 包含属性:
//div[contains(@class,'price')]—— 属性值不完全匹配时用 - 逻辑组合:
//span[@class='price' and contains(@id,'item')] - 轴定位:
//span[@class='title']/following-sibling::span—— 找同级元素 - 索引定位:
(//div[@class='item'])[1]—— 找第一个商品
淘宝的商品列表,用这个XPath能定位到所有商品价格://div[@class='item']//span[@class='price']
CSS选择器的8种语法
CSS选择器比XPath简洁。
- 类选择器:
.price—— 最常用 - ID选择器:
#price—— 最快最准 - 属性选择器:
[class*='price']—— 属性值包含price - 组合选择器:
div.item > span.price—— 组合用
选型指南:有ID用CSS,没ID用XPath。淘宝大部分元素都有ID或明确的class,用CSS就行。
正则表达式的3个场景
价格元素里经常有其他文字(比如"¥199.00 起"),用正则提取纯数字:
- 提取数字:
\d+\.?\d*—— 匹配199.00这种格式 - 排除文字:
^((?!起).)*$—— 排除带"起"的价格 - 匹配多种格式:
\d+\.?\d*|暂无报价—— 匹配数字或"暂无报价"
三、变量与数据类型
数字和字符串
从网页抓取的价格是字符串(比如"¥199.00"),要转成数字才能比较。
我的处理方法:
price_str="¥199.00"price=float(price_str.replace('¥','').strip())但有时候价格是个范围(比如"¥199.00-299.00"),这种要特殊处理。我会取最低价:
price_str="¥199.00-299.00"prices=price_str.replace('¥','').split('-')min_price=float(prices[0])列表和字典
做价格监控,我会把每个商品存成一个字典:
product={"name":"商品名称","price":199.00,"url":"商品链接","platform":"淘宝"}然后把所有商品放进一个列表。
JSON解析
如果用电商API获取数据(比如淘宝开放平台的API),返回的是JSON。
用JSON解析指令把JSON转成字典,然后提取需要的字段。
四、流程控制
For和ForEach循环
做价格监控,要循环多个商品。用ForEach循环:
获取商品列表 ForEach 商品 in 商品列表 打开商品页面 抓取价格 保存到列表如果要多平台监控(淘宝+拼多多),用嵌套循环:
ForEach 平台 in 平台列表 ForEach 商品 in 商品列表 抓取价格If判断
价格监控的核心逻辑就是If判断:
如果 当前价格 < 目标价格 发邮件通知 但要注意:价格是浮点数,比较时可能有精度问题。我的处理方法是:转成整数再比较(比如乘以100)。
Try-Catch
抓取价格的时候,经常会遇到各种意外:商品下架了、页面改版了、网络超时了等等。
用Try-Catch包住抓取逻辑,出错时记录日志,然后继续下一个商品。
五、网页自动化
等待策略
电商网站加载比较慢,一定要等元素出现再操作。
我一般用"等待元素出现",等待时间设5-10秒。如果10秒还没出现,就认为出错了。
淘宝有时候会出验证码,这种要特殊处理。我的做法是:检测到验证码后,等待30秒,让人手动处理。
弹窗处理
淘宝登录时会出弹窗。处理方法:
- 用
获取网页对话框内容查看弹窗文字 - 如果是登录弹窗,就用
填写输入框(web)输入账号密码,然后点击登录
但淘宝的登录有时候会出滑块验证码。这种用影刀处理不了,要人工处理。
翻页
淘宝搜索结果有多页。翻页有两种方式:
- 点击下一页按钮:简单,但容易被封
- 滚动加载:淘宝现在用这种方式,滚动到底部自动加载下一页
我用的是滚动加载。用执行JavaScript滚动到页面底部:
window.scrollTo(0,document.body.scrollHeight);然后等待新内容加载出来。
懒加载
淘宝的商品图片是懒加载的。但如果只是抓取价格,不需要等图片加载。
我要抓取的是价格,价格在HTML源码里就有,不需要等图片。
iframe处理
淘宝的登录框在iframe里。处理方法:
用切换到iframe指令,切换到登录框的iframe,然后在iframe里操作。
但现在的淘宝登录改版了,不是iframe了,而是弹出层。这种直接用点击元素(web)就能操作。
窗口切换
点击商品后,会打开新标签页。处理方法:
用获取已打开的网页对象,匹配方式选"匹配当前选中的网页"。
打开新标签页后,一定要切换到新标签页,不然操作的就是原标签页。
六、数据处理
Excel读写
价格监控的数据要存到Excel。我的Excel表格设计:
| 商品名 | 平台 | 当前价格 | 历史最低价 | 更新时间 | 商品链接 |
|---|
用写入Excel(行)指令写入数据。
但如果数据量很大(比如几千个商品),用Excel会很慢。这种建议用数据库。
文本清洗
从网页抓取的价格,经常带有多余字符(比如"¥199.00 起")。
用文本处理指令的"替换"功能,把多余字符清掉。
我一般会清掉这些:
- ¥符号
- 空格
- "起"字
- 换行符
JSON解析
如果用电商API,返回的是JSON。
用JSON解析指令解析。但要注意:API一般有请求频率限制。淘宝开放平台的API,每天最多调用几千次。
这种要控制好调用频率,别超了。
数据库操作
如果商品很多,用数据库存数据。
我用的是MySQL。影刀可以用数据库连接指令连接MySQL。
但要注意:连接数据库时,要勾选"允许保存密码",不然会登录失败。
七、鼠标键盘和图像自动化
模拟vs驱动
做电商监控,我主要用驱动方式。因为速度快。
但如果遇到某些按钮点不了,就换成模拟方式。
淘宝的"立即购买"按钮,有时候用驱动方式点不了,换成模拟方式就好了。
虚拟键盘
有些输入框用填写输入框(web)填不进去,就用输入文本(桌面)。
淘宝的登录账号输入框,我就用输入文本(桌面)输入的。
图像识别
当元素捕获不了的时候,用图像识别。
淘宝的滑块验证码,我就用图像识别处理的。先识别滑块的位置,然后模拟拖动。
但图像识别有点慢,而且准确率不是100%。能不用就不用。
锚点定位
图像识别可以配合锚点使用。比如先找到商品图片,然后点击图片下方的"立即购买"按钮。
9个位置:上、下、左、右、左上、右上、左下、右下、中心。
还可以设置偏移量。
八、进阶技能
HTTP/API
做电商价格监控,用API比用网页抓取快多了。
淘宝开放平台有API可以获取商品价格。但要申请API权限,还要签协议。
我用的是淘宝开放平台的taobao.item.get接口,可以获取单个商品的详细信息。
但要小心:API有调用频率限制。别超了。
Python协同
有些复杂的数据处理,用Python写比用影刀指令拼要简单。
比如我要计算价格趋势(最近7天的价格变化),用Python的pandas库很方便。
用执行Python代码指令,把Python代码粘进去。
OCR
如果价格是用图片显示的,用OCR识别。
但OCR有点慢,而且准确率不是100%。能不用就不用。
ADB
如果要监控手机APP上的价格,用ADB。
但淘宝APP有反爬虫机制,用ADB操作很容易被检测。不建议。
九、平台实战
淘宝价格监控
淘宝的反爬虫比较严格。我的策略:
每次操作后随机等待2-5秒
用
模拟鼠标移动让人为操作更逼真每次访问都用不同的User-Agent
不要频繁访问,一天最多几百次
淘宝的价格有时候会有"优惠券",实际支付价格比显示价格低。这种要特殊处理。
我的处理方法是:点击"领券"按钮,获取优惠后的价格。
拼多多价格监控
拼多多的反爬虫比淘宝松一些。但拼多多的页面加载很慢,要多等等。
拼多多的价格是"拼单价",要多人拼团才这个价。单个买的话,价格会高一些。
这种要在流程里判断:是拼单价还是单独购买价。
TEMU价格监控
TEMU是拼多多的海外版。页面是英文的,但处理逻辑差不多。
TEMU的价格有美元和当地货币两种显示。要统一成一种货币。
十、系统联动
飞书消息
价格降价了,自动发飞书消息通知我。
用发送飞书消息指令。要先配置飞书机器人的webhook地址。
我的飞书消息内容:“【价格提醒】商品XXX已降价,当前价格¥XXX,目标价格¥XXX。”
飞书多维表格
价格监控的数据存到飞书多维表格,方便手机查看。
用写入飞书多维表格指令。要先获取飞书多维表格的API token。
邮件
如果遇到错误,自动发邮件通知我。
用发送邮件指令。我用163邮箱发的,要开启SMTP服务,还要获取授权码。
定时任务
我想每天早上9点自动监控价格,用定时任务指令。
影刀的定时任务可以设置每天几点执行。我设置的是每天早上9点。
这样我上班的时候,价格监控已经跑完了,数据已经更新了。
十一、工程化与规范
子流程封装
价格监控系统比较长,要拆成多个子流程:
登录淘宝:处理登录逻辑抓取商品列表:抓取搜索结果列表抓取商品价格:抓取单个商品的价格保存数据:把数据存到Excel或数据库发送通知:降价了发通知
这样拆分后,流程清晰多了。
调试技巧
调试价格监控流程,我的经验:
- 多用打印日志:不清楚某个变量的值是什么,就打印出来看看
- 逐步执行:不要一次性运行整个流程,先逐步执行
- 截图:出错时自动截图,方便排查问题
- 小批量测试:先跑几个商品试试,没问题再全量跑
我第一次做价格监控的时候,一次性跑了几百个商品,结果中间出错了,前面的白跑了。
后来我改成:每抓10个商品存一次数据。这样即使出错了,也只丢失最后10个。
命名规范
变量名、指令名要有意义。比如商品价格比变量1好懂。
我之前的流程命名很随意,后来自己都看不懂了。现在我会给每个指令都改个有意义的名字。
版本差异
影刀有时候会更新,某些指令的用法可能会变。
我现在用的是影刀2.x版本。如果你用的是1.x版本,某些指令可能不一样。
流程模板化
价格监控系统做好后,可以存成模板。以后要做其他电商平台的监控,基于模板改就行。
比如我后来做了拼多多价格监控,就是基于淘宝价格监控的模板改的。
十二、速查表和常见报错
元素定位失败
原因1:淘宝页面改版了,元素位置变了
解决:重新捕获元素,或者用更通用的XPath(比如包含部分class名)
原因2:元素在iframe里
解决:用切换到iframe指令
价格抓取错误
原因1:价格格式变了(比如从"¥199.00"变成"199元")
解决:用正则提取数字,不要写死格式
原因2:价格是区间(比如"¥199.00-299.00")
解决:特殊处理,取最低价或最高价
Excel报错
原因1:文件被占用
解决:先关闭Excel文件,再运行流程
原因2:内存不足(数据量太大)
解决:装64位影刀,或者用数据库
循环报错
原因1:商品下架了,元素找不到了
解决:用Try-Catch包住,出错时跳过
原因2:页面刷新了,相似元素列表失效了
解决:改用For次数循环,在循环内重新获取元素列表
反爬虫拦截
原因1:访问太频繁
解决:每次操作后随机等待2-5秒
原因2:被淘宝识别为爬虫
解决:用模拟鼠标移动、模拟键盘输入让人为操作更逼真
总结
做完这个电商价格监控系统,你对影刀RPA的掌握就更深入了。
价格监控的核心就是:准确抓取价格、稳定存储数据、及时发送通知。
后面你可以自己扩展:加更多电商平台、加更多通知方式、加价格预测功能等等。
记住:RPA的价值在于自动化。只要你觉得某个操作是重复的、机械的,就可以用RPA自动化。
我做完价格监控后,又做了订单自动同步、竞品价格分析、评价情感分析等等。都是基于这个价格监控系统扩展的。
更多案例在影刀RPA学习主页 home.linyan.cloud 可以找到。
#影刀RPA #RPA教程 #电商价格监控 #淘宝 #拼多多 #网页抓取 #自动化
作者:林焱