影刀RPA进阶教程:网页截图与页面变化监控方案
有些场景不需要采集数据,只需要"盯着页面看有没有变化"。
比如:竞品商品下架了没有、活动页面上线了没有、自己的商品排名变了没有。

与其每天手动打开网页看一眼,不如让影刀每小时帮你截图,有变化了就通知你。
一、三种截图场景
| 全页面截图 | "截图"指令 | 每天/每小时 |
| 指定区域截图 | “截取元素截图” | 按需 |
![]() |
| 滚动长截图 | 多次截图后拼接(Python) | 按需 |
影刀的"截图"指令截的是当前浏览器可视区域,不是整个页面。如果需要截取"首屏以下"的内容,需要先滚动再截图。
拼多多店群自动化上架方案
二、基础版:定点截图存档

# 每小时截图一次,带时间戳命名
打开网页("https://item.jd.com/xxx.html")
等待元素出现("商品详情区域", 8秒)
# 生成带时间戳的文件名
Python代码:
from datetime import datetime
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"D:\\\\截图监控\\\\京东商品_{timestamp}.png"
变量_截图路径 = filename
截图("D:\\截图监控\\{时间戳}.png")
输出日志(f"截图已保存: {时间戳}.png")
配置定时任务每小时执行一次,一天就有 24 张截图。
三、进阶版:页面变化检测

光截图还不够,最好能自动判断"页面变了没有"。
思路:对比两张截图的像素差异。
Python代码:
import os
from datetime import datetime
from PIL import Image
import numpy as np
screenshot_dir = r"D:\\截图监控"
today = datetime.now().strftime("%Y%m%d")
# 找到最近两张截图
files = sorted([f for f in os.listdir(screenshot_dir) if f.startswith("京东商品_")])
if len(files) < 2:
print("截图不足两张,跳过对比")
else:
img1 = Image.open(os.path.join(screenshot_dir, files[–2]))
img2 = Image.open(os.path.join(screenshot_dir, files[–1]))
# 转为numpy数组对比
arr1 = np.array(img1.resize((800, 600)))
arr2 = np.array(img2.resize((800, 600)))
# 计算像素差异比例
diff = np.mean(np.abs(arr1.astype(float) – arr2.astype(float))) / 255
if diff > 0.05: # 差异超过5%
msg = f"⚠️ 页面发生变化!差异度: {diff*100:.1f}%"
print(msg)
# 触发通知
变量_变化通知 = msg
else:
print(f"页面无变化,差异度: {diff*100:.1f}%")
关键参数:diff > 0.05 这个阈值需要根据实际情况调。太小了误报多,太大了漏报多。建议先跑几天看看正常波动范围再设。

四、高级版:只监控关键区域
全页面对比太容易误报了——页面上的随机推荐、广告、时间戳都会导致"变化"。
更实用的做法:只对比你真正关心的区域。

Python代码:
from PIL import Image
# 截取页面上"价格区域"的元素截图
# 先用影刀"截取元素截图"截出关键区域
# 对比两次的价格区域截图
price1 = Image.open(r"D:\\截图监控\\价格区域_上次.png")
price2 = Image.open(r"D:\\截图监控\\价格区域_本次.png")
# 转为灰度后再对比,忽略颜色差异只关注内容
import numpy as np
arr1 = np.array(price1.convert("L"))
arr2 = np.array(price2.convert("L"))
diff = np.mean(np.abs(arr1.astype(float) – arr2.astype(float))) / 255
if diff > 0.02:
print(f"⚠️ 价格区域发生变化,差异度: {diff*100:.1f}%")
else:
print("价格无变化")
五、实战:商品排名监控
# === 商品排名监控 ===
# 场景:监控某个关键词下自己商品在第几位
关键词 = "蓝牙耳机"
目标店铺名 = "你的店铺名"
目标URL = f"https://search.jd.com/Search?keyword={关键词}"
打开网页(目标URL)
等待元素出现("商品列表", 8秒)
# 循环找目标店铺
获取相似元素列表("商品卡片") –> 商品列表
排名 = –1
遍历列表(商品列表, 商品元素, idx):
店铺名 = 获取元素文本(商品元素 // 店铺名称区域)
如果 店铺名 包含 目标店铺名:
[video(video–fyopkBSh–1781113760847)(type–csdn)(url–https://live.csdn.net/v/embed/524993)(image–https://v–

blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title–TEMU店群如何管理运营?)]
排名 = idx + 1
输出日志(f"找到目标商品:第 {排名} 位")
跳出循环
如果 排名 == –1:
输出日志(f"当前关键词未找到目标商品(可能不在前几页)")
排名 = "未上榜"
# 记录排名到Excel
读取Excel("D:\\排名监控\\排名记录.xlsx") –> 排名表
写入行数据(排名表, [当前时间, 关键词, 排名])
保存Excel(排名表, "D:\\排名监控\\排名记录.xlsx")
# 如果排名下降超过5位,发通知
如果 排名 是 数字 且 排名 > 历史排名 + 5:
发送飞书通知(f"🚨 排名下降:{关键词} 从第{历史排名}位降至第{排名}位")
六、避免被检测
高频截图可能触发网站的反爬机制。
降低风险的策略:
频率不要太高:每小时一次足够了,每分钟一次不是监控是骚扰
间隔随机化:不要精确整点执行,加上 ±5 分钟的随机偏移
用正常浏览器:不要用 headless 模式,正常的 Chrome 窗口行为更自然

Referer 和 User-Agent 保持一致:别让服务器觉得这个访问很奇怪
七、截图文件管理
一天 24 张截图,一周就是 168 张,一个月 700+ 张。不做管理很快就乱。
# 自动清理旧截图
Python代码:
import os, time
from datetime import datetime, timedelta
screenshot_dir = r"D:\\截图监控"
cutoff = datetime.now() – timedelta(days=30) # 保留30天
for f in os.listdir(screenshot_dir):
fpath = os.path.join(screenshot_dir, f)
if os.path.getmtime(fpath) < cutoff.timestamp():
os.remove(fpath)
print(f"已删除过期截图: {f}")
print(f"清理完成,保留最近30天截图")

作者:林焱

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







