欢迎光临
我们一直在努力

影刀RPA进阶教程_网页截图与页面变化监控方案

影刀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(videofyopkBSh1781113760847)(typecsdn)(urlhttps://live.csdn.net/v/embed/524993)(imagehttps://v
![在这里插入图片描述](https://iblog.csdnimg.cn/direct/8c6b19565bf04cd79da06e64a19f22c9.png#pic_center)
blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(titleTEMU店群如何管理运营?)]

排名 = 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学习手册》系列文章之一,内容源于实操经验的整理与分享。

    赞(0)
    未经允许不得转载:171主机测评 » 影刀RPA进阶教程_网页截图与页面变化监控方案
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址