影刀RPA新手教程:得物App自动化完全指南——商品信息采集、价格监控与库存管理

做潮流球鞋生意的人都知道得物的数据有多值钱。我最早是每天手动打开得物App,一个商品一个商品看价格、截图、记库存,效率极低。后来用影刀RPA写了一套流程,价格变动自动告警,库存不足自动提醒,每天省了至少4个小时。

认识影刀与安装

影刀社区版免费下载,安装很简单。唯一要注意的是——如果你想操作得物App,需要装影刀的ADB驱动,这样影刀才能连接手机。装好影刀后,在手机开发者选项里打开USB调试,用数据线连电脑,影刀会自动识别设备。如果是网页版得物,那就装Chrome插件即可。界面这块不用怕,左边指令面板,中间画布拖拽,上手很快。

元素定位四合一:XPath + CSS + 正则

得物网页版用Chrome走驱动模式,App版用ADB走图像识别+元素定位。先说网页版:

在这里插入图片描述

//div[@class='product-card']  定位商品卡片
//span[contains(@class,'price')]/text()  提取价格文本
//img[contains(@src,'cdn.dewu.com')]  定位商品图片
//a[starts-with(@href,'/product/')]  定位商品链接
//ul[@class='sku-list']/li[position()<5]  前4个SKU
//button[text()='立即购买']  定位购买按钮

CSS选择器两种场景:

div.product-list > div.card  商品列表下直接子卡片
.price span.current-price  当前价格
.size-item:not(.disabled)  可选尺码

正则表达式在解析商品标题时很实用——得物的标题格式是"品牌 商品名 货号",用^(.*?)\s+(.*?)\s+(\w+)$ 就能把三部分拆出来。

变量与数据类型

价格监控的核心数据结构:

product_data = {
    'spu_id': 'DY20240615001',
    'name': 'Air Jordan 1 Retro High OG',
    'sizes': ['40', '41', '42', '43'],
    'prices': {},
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/72217af80cac4bfa89cb0451bddf7c11.png#pic_center)

    'update_time': '2024-06-15 14:30:00'
}

列表存多个商品的监控数据,每个元素是一个字典。JSON转对象处理得物接口返回数据,用"获取JSON节点值"按路径data.spuInfo.priceList[*].price提取所有尺码价格。字符串操作在拼接商品链接时经常用——得物的商品URL是固定模板拼接SPU ID:prefix + spu_id + suffix

流程控制

价格监控的流程逻辑:

店群矩阵自动化突破运营极限!

设置价格阈值
无限循环
  ├─ ForEach product in monitor_list
  │    ├─ 打开商品页面
  │    ├─ 获取当前价格
  │    ├─ If 当前价格 < 阈值
  │    │    └─ 发送降价提醒
  │    └─ If 库存 < 警戒值
  │         └─ 发送库存预警
  │    └─ 保存当前数据到Excel
  └─ 等待5分钟

While循环用在不确定商品列表页有多少页时——一直翻页直到"加载更多"按钮消失。Try-Catch包在每个商品的获取逻辑外面,单个商品获取失败不影响其他商品。

网页自动化

得物网页版的反爬比较强。等待策略我用了"等待元素出现+额外延迟"的组合——先等目标元素加载完成,再额外等1-3秒,避免触发频率限制。
在这里插入图片描述

弹窗处理不复杂,主要是登录弹窗和新人优惠券弹窗。登录弹窗用Esc关闭,优惠券弹窗找关闭按钮点掉。如果弹窗太顽固,就用图像识别找到x图标点击。

翻页方面,得物的商品列表用的是"加载更多"按钮而不是分页。流程就是无限循环点击"加载更多",直到这个按钮的文本变成"没有更多了"或者按钮消失。每加载一批新商品,用index去重防止重复采集。

窗口切换:得物有时点击商品会在新标签页打开详情,用"获取已打开的网页对象"切换到新窗口,处理完关闭回来继续。

数据处理

采集的商品数据写入Excel,我维护三个sheet:价格趋势sheet记录每次采集的价格变化、库存监控sheet记录各尺码库存、商品基础信息sheet存静态数据。

# 价格趋势写入
price_trend = [['时间', '商品ID', '尺码', '价格']]
for record in new_price_records:
    price_trend.append([record['time'], record['spu_id'], record['size'], record['price']])
write_excel_range(price_trend, '价格趋势', first_empty_row)

文本处理:从得物商品标题中提取品牌、货号、发售年份等关键信息。用正则提取,用strip去掉多余空格。

JSON解析是核心——得物后台接口返回的数据结构复杂,要一层层解析。我写了个Python解析函数处理嵌套JSON:

在这里插入图片描述

def parse_dewu_product(json_data):
    result = {}
    result['spu_id'] = json_data['data']['spuInfo']['spuId']
    result['name'] = json_data['data']['spuInfo']['goodsName']
    result['brand'] = json_data['data']['spuInfo']['brandName']
    result['price_list'] = []
    for item in json_data['data']['spuInfo']['priceList']:
        result['price_list'].append({
            'size': item['property'],
            'price': item['price'],
            'stock': item.get('stock', 0)
        })
    return result

鼠标键盘图像自动化

得物App端我用ADB连接手机,通过图像识别操作。常用指令:

  • wait_appear('下单按钮.png') 等待下单按钮出现
  • click('搜索图标.png') 点击搜索
  • hover('商品主图.png', 3) 悬停3秒看详情

锚点定位的精髓:先以手机屏幕左上角为原点(0,0),找到搜索栏的固定位置,再相对于搜索栏偏移找到其他元素。手机端的好处是屏幕分辨率固定,坐标不会变。

进阶技能

得物的核心数据都在App里,网页版数据不全。用ADB控制手机,结合OCR识别屏幕上的文字。得物的价格标签位置固定,直接截屏那一小块区域OCR识别:
在这里插入图片描述

def ocr_extract_price(image_path):
    # 截取价格区域
    screenshot_region(100, 500, 400, 560)
    # OCR识别
    price_text = ocr_recognize('price_crop.png')
    # 提取数字
    import re
    return float(re.search(r'\d+', price_text).group())

HTTP请求抓得物H5接口。得物的H5页面接口相对宽松,用Charles抓包拿到接口地址和参数格式,影刀的HTTP请求直接调用。Python模块用来算签名——得物的接口有sign参数校验。

平台实战

完整的得物价格监控自动化:

采集环节:打开得物App→搜索目标商品→进入商品详情→记录各尺码价格和库存→截图保存→写入Excel。支持批量监控,从商品列表一次采集几十个SKU。

监控环节:影刀定时运行(每小时一次),对比当前价与历史价。价格下降超过3%触发告警,库存低于警戒值也是。告警信息包含商品名称、尺码、原价、现价、降幅百分比。

库存管理:定期扫描关注列表的所有商品,统计各尺码库存。当特定热门尺码(如42、43码)库存紧张时提前预警,方便补货。

整个过程我跑了三个月,帮我抓到了两次限量发售的低价入仓机会。

在这里插入图片描述

系统联动

降价告警通过飞书机器人发到我的群聊,消息示例:

def price_alert(spu_name, size, old_price, new_price):
    drop_pct = round((old_price - new_price) / old_price * 100, 1)
    msg = {
        "msg_type": "text",
        "content": {
            "text": f"降价提醒\n商品:{spu_name}\n尺码:{size}\n原价:{old_price}\n现价:{new_price}\n降幅:{drop_pct}%"
        }
    }
    requests.post(webhook_url, json=msg)

飞书多维表格做价格看板,每条价格变动的记录自动插入一行,包含时间、商品、尺码、价格、变动类型。团队都能实时看到。

temu店群自动化报活动案例

邮件通知用于周报——每周日晚上汇总本周价格波动TOP10,生成HTML邮件自动发给老板。

定时任务用影刀中控的cron表达式配置。价格监控每小时一次 0 0 * * * ?,库存扫描每4小时一次 0 0 0/4 * * ?,周报每周日晚8点 0 0 20 ? * SUN
在这里插入图片描述

工程化与规范

子流程拆分:

  • “得物登录”:处理登录逻辑,维护Cookie
  • “商品采集”:单个商品的完整采集
  • “价格对比”:当前价和历史价对比
  • “告警推送”:统一的消息发送逻辑

调试技巧回顾:有次价格监控流程跑着跑着突然停了,打断点排查发现是得物改版了——价格元素从span.price-current改成了div.price-box > span.current。更新XPath就恢复了。所以流程里要做好版本兼容判断。

命名规范:变量用dw_前缀表示得物相关,如dw_spu_iddw_price_list。Excel文件用日期命名如得物价格监控_20240624.xlsx。子流程统一"模块_平台"的命名方式。

有些朋友问我学影刀有什么捷径,我觉得没有。但多看别人的实操案例确实能少走弯路。像 home.linyan.cloud 上就有不少各行业的自动化实战分享,可以参考思路。

速查表与常见报错

得物常见报错及处理:

在这里插入图片描述

App连接失败:检查USB调试是否打开,数据线是否良好,ADB驱动是否安装。命令行输入adb devices看设备是否被识别。

元素定位失败(网页版):得物前端改版频率高,XPath容易失效。定期检查流程,做好元素兼容。

采集频率过高被封:得物有反爬机制。流程里加随机等待时间(2-5秒),不要太密集。

OCR识别不准:价格字体特殊时OCR容易出错。截取更大区域做识别,或者用多张截图对比提高准确率。

图片下载失败:得物图片有防盗链,直接用src可能403。需要在请求头里加Referer。

JSON解析报错:接口返回的数据结构有时会变。用Try-Catch包住解析逻辑,解析失败记录原始JSON方便排查。

库存数据不一致:不同入口看到的库存可能不同(缓存延迟)。以商品详情页库存为准,多采集一次取较新的值。

在这里插入图片描述

循环时App卡顿:手机内存不够导致。每处理10个商品后加一次等待并清理后台。

#影刀RPA #得物自动化 #球鞋电商 #价格监控 #RPA新手教程

作者:林焱
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐