文档备案控制台
免费开始使用

影刀RPA完全指南:从零搭建电商自动化日报系统——一个贯穿全文的完整实战项目

前面几十篇文章讲了很多独立技能——元素捕获、XPath、循环、条件判断、异常处理、Cookie管理、飞书通知。这篇文章把它们全部串起来,做一个完整的项目。

项目目标:每天早上8点自动抓取拼多多店铺数据,生成日报Excel,发到企业微信群。不需要一次看懂所有细节。把它当成一个“食谱”,先照着抄,跑通了再改。

picture.image

一、整体架构:五个模块,五个子流程

picture.image 一个完整的自动化日报系统,由五个模块组成:

定时任务(每天早上8:00触发)
        │
        
![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/679605ca1bf84321951d0c5162117bb8~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783076079&x-signature=Nt6uCo6UdyNx76nmYvEDqoISkf0%3D)
        ▼
┌───────────────────────────────────────┐
│  A_登录流程   →   保持登录态/Cookie管理  │
│  B_数据采集   →   抓取店铺核心数据       │
│  C_数据处理   →   清洗、计算、汇总       │

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/9b3033e19bbe47c8aac4eca700759d14~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783076079&x-signature=Q7mF1yfuAgfH6P3%2BXBZFahb3IPM%3D)
│  D_生成报表   →   填充日报模板           │
│  E_发送通知   →   推送到企业微信群       │
└───────────────────────────────────────┘

picture.image 五个步骤,五个子流程,清晰分离。任何一个坏了只影响它自己。

社区版用户注意:社区版每天30分钟时长限制。日报系统建议在凌晨运行,时长够用。如果数据量大,可以分批采——先采订单,再采商品,分两天跑。

创业版以上用户:无时长限制,可以一次跑完所有数据。

picture.image

二、A_登录流程:Cookie管理是基础

登录是日报系统的第一步。不可能每天手动登录一次,必须实现自动登录+Cookie持久化

picture.image

完整登录子流程

# 子流程:A_登录流程

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/e1220b45deec4b8b84521e27bfd296d0~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783076079&x-signature=LyKI3kB4gyIpeGgVX4PPi2PwW0I%3D)
# 输出:全局变量.bool_已登录

# 1. 打开拼多多登录页
打开网页("https://mms.pinduoduo.com/login")

# 2. 尝试加载Cookie
如果 文件存在("D:\\cookie\\pdd_cookie.txt"):
    读取文本文件("D:\\cookie\\pdd_cookie.txt") → cookie内容
    设置Cookie(cookie内容)
    刷新页面()

# 3. 检测登录态
判断元素是否存在("店铺名称") → 登录状态

# 4. 如果Cookie过期,重新登录
如果 登录状态 == False:
    清除当前网页Cookie()
    等待元素出现("账号输入框", 5秒)
    输入文本("账号输入框", 全局变量.str_账号)
    输入文本("密码输入框", 全局变量.str_密码)
    点击元素("登录按钮")
    等待元素出现("店铺名称", 10秒)
    
    # 保存新Cookie
    获取当前网页Cookie() → 新cookie
    写入文本文件("D:\\cookie\\pdd_cookie.txt", 新cookie)

全局变量.bool_已登录 = True
输出日志("登录流程完成")

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/71c5011242de4fcd98b7f6d7071084fd~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783076079&x-signature=X5tRRAsqDcjRkRux2d0trrYywq0%3D)

关键元素捕获参考

# 捕获元素:拼多多商家后台登录页账号输入框
//input[@placeholder='请输入账号']

# 捕获元素:密码输入框
//input[@type='password']

# 捕获元素:登录按钮
//button[contains(text(),'登录')]

# 捕获元素:登录成功标志(店铺名称)
//span[contains(@class,'shop-name')]

这里容易踩坑:Cookie文件路径要用绝对路径,不要用相对路径。定时任务执行时的工作目录可能跟手动调试时不一样,相对路径会找不到文件。

三、B_数据采集:翻页采集店铺核心数据

登录成功后,进入数据中心或商品管理页面,采集昨天的订单/商品数据。

采集子流程

picture.image

# 子流程:B_数据采集
# 输出:全局变量.list_采集数据(列表,每个元素是字典)

# 1. 进入数据中心
点击元素("数据中心菜单")
等待元素出现("数据表格", 5秒)

# 2. 设置筛选条件:昨天
点击元素("日期筛选")
点击元素("昨日")
点击元素("查询按钮")
固定等待(2秒)  # 等待数据刷新

# 3. 初始化结果列表
采集数据 = []

# 4. 翻页采集
设置 当前页码 = 1
条件循环(当前页码 <= 10):  # 最多采10页
    # 获取当前页所有数据行
    获取相似元素列表("表格数据行") → 数据行列表
    
    遍历列表(数据行列表, 当前行):
        商品名 = 获取元素文本(当前行, ".//商品名元素")
        订单数 = 获取元素文本(当前行, ".//订单数元素")
        金额 = 获取元素文本(当前行, ".//金额元素")
        采集数据.append({
            "商品名称": 商品名,
            "订单数": 订单数,
            "金额": 金额
        })
    
    # 翻页
    判断元素是否存在("下一页按钮") → 有下一页
    如果 有下一页 == False:
        跳出循环
    点击元素("下一页按钮")
    等待元素出现("数据表格", 5秒)
    当前页码 = 当前页码 + 1

全局变量.list_采集数据 = 采集数据
输出日志("采集完成,共" + str(len(采集数据)) + "条数据")

关键元素捕获参考

# 捕获元素:数据中心菜单
//span[contains(text(),'数据中心')]

# 捕获元素:数据表格行(父容器)
//div[@class='data-table']//tr

# 捕获元素:商品名称(基于行内相对路径)
.//td[1]/span

# 捕获元素:订单数
.//td[2]/span

# 捕获元素:金额
.//td[3]/span

# 捕获元素:下一页按钮
//a[contains(text(),'下一页')]

容易踩坑:日期筛选点击“昨日”后,数据不会立即刷新。用“固定等待”2秒再开始采集,否则可能采到旧数据。

四、C_数据处理:清洗、计算、汇总

采集到的原始数据是脏的——金额带“¥”、订单数带“件”、有重复行。数据处理模块负责清洗和计算。

数据处理子流程(Python代码)

在影刀里拖入“执行Python代码”指令:

# 子流程:C_数据处理
# 输入变量:raw_data(从影刀传入的采集数据列表)
# 输出变量:clean_data(清洗后的数据列表)、summary(汇总字典)

import re
from datetime import datetime

# ===== 1. 数据清洗 =====
clean_data = []
for row in raw_data:
    # 清洗商品名称(去除首尾空格和换行)
    商品名 = row.get("商品名称", "").strip()
    
    # 清洗订单数(提取数字,"123件" → 123)
    订单数_raw = row.get("订单数", "0")
    match = re.search(r'(\d+)', 订单数_raw)
    订单数 = int(match.group(1)) if match else 0
    
    # 清洗金额(提取数字,"¥12,345.67" → 12345.67)
    金额_raw = row.get("金额", "0")
    match = re.search(r'[\d,]+\.?\d*', 金额_raw.replace(',', ''))
    金额 = float(match.group(0)) if match else 0.0
    
    clean_data.append({
        "商品名称": 商品名,
        "订单数": 订单数,
        "金额": 金额
    })

# ===== 2. 计算汇总指标 =====
总订单数 = sum([item["订单数"] for item in clean_data])
总金额 = sum([item["金额"] for item in clean_data])
商品数 = len(clean_data)

# 计算客单价
客单价 = round(总金额 / 总订单数, 2) if 总订单数 > 0 else 0

# 计算TOP10商品(按金额排序)
sorted_data = sorted(clean_data, key=lambda x: x["金额"], reverse=True)
top10 = sorted_data[:10]

# ===== 3. 输出结果 =====
summary = {
    "采集日期": datetime.now().strftime("%Y-%m-%d"),
    "商品数": 商品数,
    "总订单数": 总订单数,
    "总金额": 总金额,
    "客单价": 客单价,
    "top10": top10
}

print(clean_data)  # 影刀捕获为输出变量
print(summary)     # 影刀捕获为输出变量

影刀配置

  • 输入变量{"raw_data": ${采集数据}}
  • 输出变量${清洗数据}${汇总数据}

五、D_生成报表:填充日报模板

数据处理完后,生成一份漂亮的日报Excel。

报表生成子流程

# 子流程:D_生成报表
# 输入:clean_data(清洗后数据)、summary(汇总数据)
# 输出:报表文件路径

# 1. 创建Excel文件
创建Excel文件("D:\\日报\\店铺日报_" + 当前日期 + ".xlsx")

# 2. 写入汇总信息(第一行开始)
写入单元格("A1", "店铺日报 - " + 当前日期)
写入单元格("A2", "总订单数:" + str(汇总数据.总订单数))
写入单元格("A3", "总金额:¥" + str(汇总数据.总金额))
写入单元格("A4", "客单价:¥" + str(汇总数据.客单价))
写入单元格("A5", "商品数:" + str(汇总数据.商品数))

# 3. 写入TOP10商品明细(第7行开始)
写入单元格("A7", "排名")
写入单元格("B7", "商品名称")
写入单元格("C7", "订单数")
写入单元格("D7", "金额")

行号 = 8
遍历列表(汇总数据.top10, idx, 商品):
    写入单元格("A" + str(行号), str(idx + 1))
    写入单元格("B" + str(行号), 商品.商品名称)
    写入单元格("C" + str(行号), 商品.订单数)
    写入单元格("D" + str(行号), 商品.金额)
    行号 = 行号 + 1

# 4. 保存并关闭
保存Excel文件()
关闭Excel文件()

报表路径 = "D:\\日报\\店铺日报_" + 当前日期 + ".xlsx"

进阶做法:提前做一个带图表和格式的日报模板(.xltx),每次用“复制工作表”指令复制模板,再把数据填进去。比每次从零创建表格高效得多。

六、E_发送通知:推送到企业微信群

日报生成后,自动发到企业微信群。

通知子流程

企业微信没有封装好的指令,用“发送HTTP请求”发。

# 子流程:E_发送通知
# 输入:summary(汇总数据)、报表路径

# 1. 构造消息内容(Markdown格式)
消息内容 = """
## 📊 店铺日报 - {日期}

> **核心指标**
> 总订单数:**{总订单数}** 单
> 总金额:**¥{总金额}**
> 客单价:**¥{客单价}**
> 在售商品数:**{商品数}** 个

> **TOP3 热销商品**
1. {商品1} — {金额1}元
2. {商品2} — {金额2}元
3. {商品3} — {金额3}元

[点击查看完整报表](文件路径)
""".format(
    日期=汇总数据.采集日期,
    总订单数=汇总数据.总订单数,
    总金额=汇总数据.总金额,
    客单价=汇总数据.客单价,
    商品数=汇总数据.商品数,
    商品1=汇总数据.top10[0].商品名称,
    金额1=汇总数据.top10[0].金额,
    # ...
)

# 2. 发送HTTP请求到企业微信Webhook
请求体 = {
    "msgtype": "markdown",
    "markdown": {
        "content": 消息内容
    }
}

发送HTTP请求(
    URL=全局变量.企业微信Webhook,
    方法="POST",
    请求头={"Content-Type": "application/json"},
    请求体=JSON转文本(请求体)
)

# 3. 发送报表文件(先上传获取media_id)
# 参考企业微信文档:上传文件获取media_id,再发文件消息

容易踩坑:企业微信Markdown不支持表格和HTML标签。如果消息太长,会被截断。建议消息只发核心指标和TOP3,完整数据在附件Excel里。

七、定时任务配置:每天8点自动运行

所有子流程开发完成后,配置定时任务每天早上8点自动执行。

创业版/企业版(推荐)

影刀客户端 → 计划任务 → 新建 → 选择应用 → 执行时间设“每天 08:00”。

社区版(用Windows任务计划)

社区版没有原生定时功能,用Windows任务计划:

  1. 导出应用为.shr文件
  2. 写批处理脚本启动影刀执行该应用
  3. 在Windows任务计划中设置每天8点执行

具体操作参考前文《定时任务的4种方案对比与夜间执行避坑完整指南》。

八、完整主流程(调用所有子流程)

A_Main(主流程)
├─ 【初始化】
│   ├─ 设置全局变量:str_账号 = "从应用参数读取"
│   ├─ 设置全局变量:str_密码 = "从应用参数读取"
│   └─ 设置全局变量:企业微信Webhook = "从应用参数读取"
│
├─ 【Step 1:登录】
│   └─ 调用子流程 A_登录流程
│
├─ 【Step 2:采集数据】(包Try-Catch)
│   ├─ Try:
│   │   └─ 调用子流程 B_数据采集 → 采集数据
│   ├─ Catch:
│   │   ├─ 截图保存("D:\\error\\采集失败_" + 时间 + ".png")
│   │   └─ 输出日志("采集失败:" + %Error%)
│   └─ Try结束
│
├─ 【Step 3:数据处理】
│   └─ 调用子流程 C_数据处理(采集数据) → 清洗数据, 汇总数据
│
├─ 【Step 4:生成报表】
│   └─ 调用子流程 D_生成报表(清洗数据, 汇总数据) → 报表路径
│
├─ 【Step 5:发送通知】
│   └─ 调用子流程 E_发送通知(汇总数据, 报表路径)
│
└─ 【结束日志】
    └─ 输出日志("日报生成完成:" + 当前时间)

常见问题/易错速查

  1. 定时任务执行时报“元素找不到” → 检查Cookie是否过期。在A_登录流程中增加登录态检测和自动重新登录逻辑。

  2. 日报Excel里金额带¥符号导致计算错误 → 在C_数据处理中用正则提取数字,不要直接转float。

  3. 企业微信消息发不出去 → 检查Webhook地址是否正确、是否设置了“自定义关键词”(消息内容必须包含关键词)。

  4. 社区版30分钟不够跑 → 优化采集逻辑:减少翻页页数、用“获取相似元素列表”代替逐行采集、把耗时操作放到Python代码里执行(不占RPA时长)。

  5. 报表文件太大发不了企业微信 → 企业微信文件消息限制20MB。如果日报Excel太大,改成只发摘要消息,报表存到共享网盘发链接。

  6. Cookie文件路径找不到 → 用绝对路径(如D:\\cookie\\pdd_cookie.txt),不要用相对路径。

推荐资源

  1. 影刀官方帮助中心搜索“计划任务”和“Cookie管理
  2. 企业微信开发者文档:https://developer.work.weixin.qq.com/(群机器人Webhook配置)
  3. 影刀开发者社区搜“日报系统”有完整案例模板
  4. B站“小可耐教你学影刀RPA”有日报系统从零搭建的系列视频

#影刀RPA #RPA自动化 #日报系统 #数据采集 #定时任务 #电商自动化

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论