影刀RPA新手教程:从小白到独立开发的完整学习路线图——用电商价格监控项目贯穿每个学习阶段
影刀RPA新手教程:从小白到独立开发的完整学习路线图——用电商价格监控项目贯穿每个学习阶段
很多人问我:学影刀到底该怎么开始?先学什么后学什么?大概要多久?
我自己的体会是,如果你有一个明确的项目目标,学习效率会高很多。
这篇给你画一条完整的学习路线,每个阶段用"电商价格监控"这个项目来实战——监测淘宝、拼多多上指定商品的每日价格,价格低了自动通知你。
这个项目学完,你能搞定日常90%的自动化需求。
第一阶段:先把环境搭起来(1天)
下载和安装
去影刀官网下载社区版,免费。安装过程一路下一步就行,和装普通软件一样。
装完之后两件事必须做:
第一,安装浏览器插件。影刀的安装目录里有浏览器插件,双击打开,自动安装到Chrome。
第二,打开影刀登录。手机号注册,社区版不需要企业认证。
打开界面后不用紧张——左边的指令面板有几百条指令,但你第一个月真正用到的也就二三十条。
第一个测试
新建一个空白流程,拖一条"输出信息"到编辑区,内容写"hello"。
点击运行,看看下面的日志窗口有没有输出。
能跑通,环境就没问题。

第二阶段:学会找东西——元素定位(核心技能,3天)
做价格监控,第一步是能定位到淘宝搜索框、商品列表、价格标签。
影刀找元素的方法就四种,我按使用频率排:
元素捕获(最常用)
打开淘宝首页,在影刀里点"元素捕获",鼠标移到搜索框上。
影刀会自动识别输入框的属性。存到元素库,以后在流程里直接选"淘宝搜索框"就行。
XPath与CSS选型指南
当元素捕获不够用时就得手写定位。
XPath写法:
//input[@id='q'] # 淘宝搜索框
//div[@class='price']/span[2] # 商品价格
//a[contains(@class,'title')] # 商品标题,class是动态的
//div[@class='item'][1]//div[@class='price'] # 第一个商品的价格
//span[text()='月销量']/preceding-sibling::span # 月销量数字
//div[@data-index='0']//span[@class='price-value'] # 数据属性定位
CSS选择器:
#q /* id选择器 */
.price > span /* 子元素 */
a.title-link /* class选择器 */
div.item div.price /* 后代选择器 */
input[placeholder*="搜索"] /* 属性模糊匹配 */
div.item:nth-child(2) /* 第二个商品 */
div.item:first-child .price /* 第一个商品价格 */
.sku-item.selected /* 组合选择器 */
你问我选哪个?项目初期用CSS(简短好读),遇到复杂父子关系用XPath(轴定位更强)。
我第一次做价格监控,发现商品标题的class是随机字符串,CSS直接类名匹配失效了。
排查后发现XPath的 contains() 可以模糊匹配,换XPath就解决了。
正则的3个实战场景
采集的价格可能是"¥59.90"这种格式,要提取出数字59.90。

import re
price = re.findall(r'\d+\.?\d*', '¥59.90')[0] # 得到 "59.90"
商品链接里的商品ID:
item_id = re.findall(r'id=(\d+)', url)[0]
清洗拼多多标题中的活动标签:
clean_title = re.sub(r'【.*?】', '', title)
第三阶段:数据存取(2天)
变量类型速记
做价格监控常用的变量类型:
price = 59.90 # 浮点数存价格
title = "连衣裙夏季" # 字符串存标题
is_lowest = True # 布尔存状态
urls = ["url1","url2"] # 列表存多个商品链接
product = {
"title": "连衣裙",
"price": 59.90,
"shop": "某某旗舰店",
"history": [69.90, 65.00, 59.90] # 历史价格
}
字典的键不要用中文——这个坑我踩过。影刀Python引擎下,中文字典键在部分操作里会报 KeyError。
Excel读写——价格监控的核心存储
拼多多店群自动化上架方案
读取监控列表: 你的Excel里存了要监控的商品链接,用"读取Excel"指令整列读取。
excel = xbot.app.excel.get_active()
sheet = excel.get_active_sheet()
url_list = sheet.get_range("A2:A50") # 从第2行开始读
写入价格记录: 每次采集完,把数据追加到Excel。
# 表头:日期 | 商品名称 | 当前价格 | 昨日价格 | 差值 | 链接
for product in all_results:
sheet.write_row(row, ["2025-01-15", product["title"],
product["price"], product["yesterday_price"],
product["diff"], product["url"]])
row += 1
文本清洗

淘宝价格有时显示"¥59.90-89.90"这样的区间,需要提取最低价。
if "-" in price_text:
min_price = float(price_text.split("-")[0].replace("¥", ""))
JSON处理
如果用淘宝/拼多多的接口直接获取数据,返回的是JSON。
import json
response_data = json.loads(接口返回文本)
price = response_data["data"]["item"]["price"]
数据库存储(进阶)
价格监控数据量大的时候用数据库更好管理。
import sqlite3
conn = sqlite3.connect("price_monitor.db")
conn.execute("""
CREATE TABLE IF NOT EXISTS price_history (
id INTEGER PRIMARY KEY,
product TEXT,
price REAL,
date TEXT
)
""")
conn.execute("INSERT INTO price_history VALUES (NULL,?,?,?)",
(product["title"], product["price"], "2025-01-15"))
conn.commit()
conn.close()
数据库连接的5个常见报错一定要记:
no such table— 忘了建表,先执行CREATE TABLEdatabase is locked— 上一次操作没conn.close(),后面全卡住UNIQUE constraint failed— 主键冲突,用INSERT OR REPLACEOperationalError: near "xxx": syntax error— SQL语句多了或少了个引号/逗号sqlite3.ProgrammingError— 连接已经关了还在操作数据,检查close()的位置
第四阶段:流程控制——让脚本有脑子(3天)
循环的五种形态
价格监控用得最多的是这三种:
For次数循环: 知道今天要检查20个商品,循环20次。
ForEach列表循环: 遍历商品链接列表,一个个打开查看。
for url in url_list:
打开网页(url)
提取价格()
保存数据()
While条件循环: 翻页用。淘宝搜索结果的翻页不确定有几页,用While配合"下一页"按钮状态判断。

while True:
采集当前页商品价格()
下一页按钮 = 查找元素("下一页")
if "disabled" in 下一页按钮.get_attribute("class"):
break
点击(下一页按钮)
sleep(2)
If判断的妙用
同一个页面,价格显示格式可能不同。
price_element = 查找元素("价格")
if price_element is None:
# 用图像识别找价格
price = ocr_识别价格()
elif "¥" in price_element.text:
price = float(price_element.text.replace("¥", ""))
else:
# 可能是区间价
price = 处理区间价(price_element.text)
Try-Catch救命
网络波动、页面改版、反爬弹出验证码——这些都会导致流程中断。
for url in url_list:
try:
打开网页(url)
提取价格()
保存到Excel()
except Exception as e:
print("商品{}采集失败:{}".format(url, str(e)))
写入错误日志(url, str(e))
continue # 跳过这个,继续下一个
我第一次做价格监控跑了3天就停了,因为某个商品下架了,程序直接崩溃。
加了Try-Catch之后连续跑了一个月没断过。
第五阶段:网页自动化进阶(3天)
等待策略
淘宝、拼多多这类大站,页面加载速度不稳定。
三种等待策略混着用:
# 策略1:固定等待
sleep(3)
# 策略2:等待元素出现——等搜索结果加载
等待元素出现("商品列表容器", timeout=10)
# 策略3:等待元素消失——等loading遮罩消失
等待元素消失("加载中", timeout=15)
我的习惯是:固定等待只用在不需要精确操作的间隙;核心操作前后用元素等待。
弹窗处理五步法
电商网站弹窗特别多——登录弹窗、活动弹窗、优惠券弹窗…

def 处理所有弹窗():
# Step 1: 检测
弹窗元素列表 = 查找所有元素("弹窗关闭按钮")
for 弹窗 in 弹窗元素列表:
# Step 2: 点关闭
try:
点击(弹窗)
except:
# Step 3: 图像识别找X
try:
win32.image.click("关闭图标")
except:
# Step 4: 按Esc
按ESC键()
# Step 5: 确认所有弹窗已消失
等待元素消失("弹窗遮罩", timeout=3)
翻页的disabled class判断
淘宝搜索结果翻到底,下一页按钮变成灰色不能点。
def 有没有下一页():
按钮 = 查找元素("下一页")
class_attr = 按钮.get_attribute("class")
return "disabled" not in class_attr
懒加载处理
拼多多的商品列表是懒加载的,滚到哪加载到哪。
last_count = 0
while True:
采集可见商品()
current_count = len(已采集列表)
if current_count == last_count:
break # 数量没变,说明到底了
last_count = current_count
页面滚动到底部()
sleep(2)
iframe处理
有些后台管理系统的商品编辑页面在iframe里。
先"切换到iframe"→操作iframe内元素→"切回主页面"。
窗口切换
点击商品链接可能打开新标签页。用"切换网页窗口"按标题切换到新标签,操作完再切回来。
第六阶段:硬件操作(2天)
模拟vs驱动模式
做价格监控,网页操作用驱动模式就行——速度快。
但如果想截商品图片存证据,驱动模式的截图可能和实际显示不一样,这时候用模拟模式截图。
图像识别做兜底

有些按钮没法用元素定位——比如拼多多的某些按钮是纯图片。
from xbot import win32
# 等待"价格保护"按钮出现
win32.image.wait_appear("价格保护图标", timeout=10)
# 点击按钮右下角(避免点到文字上)
win32.image.click("价格保护图标", anchor=('bottomRight', 5, 5))
# 鼠标悬停在价格图上
win32.image.hover("价格图表", anchor=('middleCenter', 0, 0))
锚点9位置加上偏移量,能精准点击任何图片的任何位置。
键盘操作
搜索时输入了关键词,回车触发搜索——按键("Enter")。
截图时按Ctrl+S保存——按键("Ctrl+S")。
第七阶段:进阶武器库(一周)
HTTP请求直抓接口
这个方法比模拟网页快10倍不止。
打开浏览器的F12开发者工具,切到Network标签,搜索一个商品,看哪个XHR请求返回了价格数据。
import requests
url = "https://api.example.com/item/detail?id=123"
headers = {
"User-Agent": "Mozilla/5.0 ...",
"Cookie": "从浏览器复制"
}
resp = requests.get(url, headers=headers)
data = resp.json()
price = data["data"]["item"]["price"]
Python协同
写复杂的逻辑用Python代码块。
# 自定义函数:计算价格变化百分比
def calc_change(today, yesterday):
if yesterday == 0:
return 0
return round(((today - yesterday) / yesterday) * 100, 2)
change = calc_change(59.90, 69.90) # -14.32%
跨模块调用:from . import tools 引用你封装好的工具函数。
OCR识别价格图
有些店铺的价格写在图片上而不是文本里。

影刀的OCR能从截图中识别数字。
截图保存("价格区域.png")
price_text = ocr_识别("价格区域.png")
price = float(re.findall(r'\d+\.?\d*', price_text)[0])
ADB手机自动化
监控手机端的价格——电商App的价格有时候和网页不一样。
from xbot import mobile
session = mobile.connect_by_custom_name("我的手机")
session.find_by_xpath("//android.widget.TextView[@text='淘宝']").click()
session.find_by_id("com.taobao.taobao:id/search_edit").send_keys("连衣裙")
session.swipe(500, 1200, 500, 200) # 向上翻
第八阶段:平台实战——淘宝+拼多多
淘宝价格监控流程
打开淘宝首页
→ 处理可能弹出的登录弹窗
→ 在搜索框输入商品名称
→ 按回车搜索
→ 等待结果加载
→ 循环商品列表
→ 提取标题、价格、月销量、店铺名
→ 和昨日价格比较
→ 如果降价超过10%则标记
→ 判断有没有下一页(看disabled)
→ 有就继续翻
→ 写入Excel
→ 有降价商品则发送飞书通知
拼多多价格监控
和淘宝基本一样,区别:
- 拼多多搜索结果页的结构不同,class命名规范不一样
- 拼多多反爬更严,等待时间要更长
- 拼多多的"下一页"翻页用按钮文本判断更稳
两个平台各写一套选择器,其他逻辑完全复用。
第九阶段:系统联动——让流程自己跑、自己通知
飞书消息通知
TEMU店群如何管理运营?
价格降了自动发飞书消息给你。
在飞书群里添加自定义机器人,拿webhook地址。

import requests
webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/xxx"
msg = {
"msg_type": "interactive",
"card": {
"header": {"title": {"content": "价格监控提醒", "tag": "plain_text"}},
"elements": [{"content": "商品{}降价了!从{}降到{}".format(
product, old_price, new_price), "tag": "plain_text"}]
}
}
requests.post(webhook, json=msg)
飞书多维表格
数据量大的时候,飞书多维表格比Excel更适合做历史记录。
影刀的飞书多维表格指令支持直接写入记录。
邮件通知
配置SMTP后可以发邮件。
用QQ邮箱的话需要开启SMTP服务获取授权码。
定时任务
在影刀控制台配置定时任务,让价格监控每天自动跑。
设置每天上午9点执行,跑完后发飞书通知。
第十阶段:工程化——写出能维护的流程
子流程封装
一个价格监控流程可能有上百条指令,全部铺在主流程里是灾难。
拆分子流程:
主流程
├── 读取监控列表
├── 处理所有弹窗(子流程)
├── 循环采集商品
│ ├── 打开商品页面(子流程)
│ ├── 提取价格(子流程)
│ └── 比较历史价格(子流程)
├── 写入Excel(子流程)
└── 发送通知(子流程)
调试断点
运行报错时,在出错指令前打断点。

点击指令行号后面的空白处,出现橙色点就是断点。
重新运行,程序停住后看"调试变量"面板。
我第一次做价格监控时遇到 Can not convert Array to String 的报错。
打断点后发现循环读取Excel时,循环项变量是个列表而不是单个值——因为我设置了循环"多列",应该设置循环"单列"。
改了之后就可以了。
这个报错的核心原因:你把一个数组(列表)传给了一个只接受字符串的参数。
命名规范
- 变量:
product_name、current_price、history_prices - 子流程:
提取商品价格、比较历史最低、发送降价通知 - 注释写在关键步骤前
版本选择
社区版免费,个人用足够。创业版多了团队协作。企业版有权限管理和私有化部署。新手起步用社区版。
流程模板
价格监控的框架可以复用给任何采集类项目:
准备数据→打开网页→处理弹窗→循环采集→数据处理→存储→通知→退出
把商品链接换成其他内容,就是一个通用采集器模板。
附:常见报错速查
元素定位失败:
可能原因:页面没加载完、元素在iframe里、选择器用了动态class。
排查顺序:加等待→查F12→换成contains写法。
XPath语法报错:
最常见的错误:函数名写错(contians不是contains)、中文引号([class='标题'])—换英文、漏了@符号。
Excel Array to String:
把列表直接写进单元格了。Excel一个单元格只能存一个值。取列表第一项或逐个写入。
Excel日期偏移:
影刀读Excel日期可能偏一天。用日期格式化统一处理。
数据库连接失败:
5种常见报错:no such table、database is locked、UNIQUE约束冲突、OperationalError语法错误、已关闭连接继续操作。
弹窗拦截:
电商网站的弹窗最烦。5步流程多练几遍形成肌肉记忆。
无限循环:
While忘了写退出条件。写循环前先想清楚什么时候停。
图像识别失败:
图片库的截图分辨率和当前屏幕不匹配。重新截图,确保分辨率一致。
关于学习资源,影刀官方文档是最全的。还有一个 home.linyan.cloud 上面整理了不少实战合集,可以翻翻看看有没有对口味的内容。
#影刀RPA #RPA教程 #学习路线 #价格监控 #自动化
作者:林焱
更多推荐



所有评论(0)