自动化网页检测提醒

自动化网页检测提醒

一、前言

随着网页动态化技术的普及,许多关键信息(如新闻公告、商品价格、库存状态等)会实时更新。手动监控效率低下且易遗漏,本方案通过自动化监测+智能提醒,实现对指定网页区域的实时监控,确保第一时间感知内容变化,提升业务响应效率。

二、适用场景

  • 企业公告监测
    及时获取政策更新、系统维护通知
  • 电商价格追踪
    监控竞品价格波动或促销活动
  • 数据看板监控
    实时感知业务指标异常(如订单量骤降)
  • 内容合规审查
    检测网页敏感词或非法内容
  • API状态监控
    通过网页呈现内容间接监控服务健康状态

三、实现方式

(一)技术架构

graph TD

A[定时抓取] --> B{内容变更检测}

B -->|未变化| C[记录日志]

B -->|已变化| D[触发提醒]

D --> E[Webhook通知]

D --> F[邮件/短信提醒]

(二)核心步骤

  • 目标区域抓取
    通过CSS选择器精准定位网页元素
    支持静态HTML与动态渲染内容(如React/Vue)
  • 内容指纹计算
    使用MD5/SHA算法生成内容哈希值
  • 变更比对策略
    对比当前与历史哈希值
    支持阈值触发(如连续3次变化确认)
  • 通知通道
    Webhook推送至企业微信/钉钉/飞书
    邮件、短信多通道覆盖

四、实现方式

  • 文件名称:zdh-monitor.sh
  • 文件内容,注意需要linux文件编码格式,需要执行文件权限
bash 复制代码
#!/bin/bash
# 动态内容监控脚本 v2.0

####################
### 基础配置 ###
####################

# 监控页面URL
TARGET_URL="https://xxx.xx.xx/platform-home"
# CSS选择器(示例监控id为thediv的div)
CSS_SELECTOR="div#thediv"
# 重试:检查间隔(秒)
CHECK_INTERVAL=60


####################
### 高级配置 ###
####################

# 网络请求重试次数
MAX_RETRY=3
# 模拟浏览器UA
USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
# 哈希存储文件
HASH_FILE="/root/lzc-bin/zdh-monitor.data"
# 日志文件
LOG_FILE="/root/lzc-bin/zdh-monitor.log"
# 页面加载超时时间(秒)
TIMEOUT=30

####################
### 消息通知配置 ###
####################
# 定义当前时间
Now_Date=$(date +%Y-%m-%d)
# 配置告警提示信息
MSG_DATA="{\"secretKey\": \"xxx\",\"phone\":\"132****2013\",\"title\":\"xxx平台\",\"date\":\"$Now_Date\",\"msgText\":\"公告内容已更新!\"}"
# 定义企业微信机器人的 API 接口
WebHook='http://xxxxx.xx.com:8200/msg/send'


####################
### 函数定义 ###
####################
init_environment() {
    # 检查Node.js环境
    if ! command node -v  &> /dev/null; then
        echo "正在安装Node.js..."
		curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
        sudo yum install epel-release
		sudo yum install nodejs
		sudo yum install npm --enablerepo=epel
		sudo npm install -g express
		sudo npm install -g express-generator
    fi

    # 安装依赖模块
    if [ ! -d "node_modules/puppeteer" ]; then
        npm install puppeteer
		npm install playwright
		npx playwright install firefox
    fi
}
#/usr/bin/firefox
get_dynamic_content() {
    # 使用Node.js执行浏览器渲染
    node <<EOF
const puppeteer = require('puppeteer');
const { firefox } = require('playwright');

(async () => {
    const browser = await firefox.launch();
    const page = await browser.newPage();
    
    try {
        await page.goto("$TARGET_URL", {
            waitUntil: 'load',
            timeout: ${TIMEOUT}000
        });

        // 等待目标元素加载
        await page.waitForSelector("$CSS_SELECTOR", {
            visible: true,
            timeout: ${TIMEOUT}000
        });

        const content = await page.evaluate(selector => {
            const el = document.querySelector(selector);
            return el ? el.innerText.trim() : '';
        }, "$CSS_SELECTOR");

        console.log(content);
    } catch (error) {
        console.error("ERROR:" + error.message);
        process.exit(1);
    } finally {
        await browser.close();
    }
})();
EOF
}

send_notification() {
    # 发送变更通知(示例)
    curl $WebHook -H 'Content-Type: application/json' -X POST --data "${MSG_DATA}" &> /root/lzc-bin/dbz-send-msgText.txt
}

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

####################
### 主逻辑 ###
####################
init_environment
touch "$LOG_FILE"

log "=== 启动动态内容监控 ==="
log "目标地址:$TARGET_URL"
log "CSS选择器:$CSS_SELECTOR"

current_loop=1

while true; do
    # 获取动态内容
    content_output=$(get_dynamic_content 2>&1)
	
	if [ $MAX_RETRY -gt 0 ] && [ $current_loop -ge $MAX_RETRY ]; then
        break
    fi
	
	((current_loop++))
    if [[ "$content_output" == ERROR:* ]]; then
        error_msg=${content_output#ERROR:}
        log "[ERROR] 页面加载失败:${error_msg%%$'\n'*}"
        sleep $CHECK_INTERVAL
        continue
    fi

    # 处理多行内容
    content=$(echo "$content_output" | sed '/^$/d' | tail -n +2 | sed 's/"/\\"/g')
    current_hash=$(echo "$content" | md5sum | awk '{print $1}')
    last_hash=$(cat "$HASH_FILE" 2>/dev/null)

    log "[INFO] 本次监控内容:$content"
	
    # 对比内容变化
    if [ "$current_hash" != "$last_hash" ]; then
        if [ -n "$last_hash" ]; then
            log "[NOTICE] 检测到内容变更(哈希值:$last_hash → $current_hash)"
            send_notification "$content"
        else
            log "[INFO] 初始化监控哈希:$current_hash"
        fi
        
        echo "$current_hash" > "$HASH_FILE"
    fi

    sleep $CHECK_INTERVAL
done
  • 设置定时任务(每天9点检测)
bash 复制代码
(crontab -l ; echo "0 9 * * * /path/to/zdh-monitor.sh") | crontab -

五、结论

(一)方案价值

  • 实时感知:分钟级变化检测,告别人工刷新
  • 精准定位:通过CSS选择器锁定关键区域,避免无效告警
  • 灵活集成:支持对接主流消息平台(钉钉/企业微信/Slack)
  • 审计追溯:完整记录变更历史与通知日志
相关推荐
胡耀超1 小时前
18.自动化生成知识图谱的多维度质量评估方法论
人工智能·python·自动化·知识图谱·数据科学·逻辑学·质量评估
江禾藜4 小时前
Python爬虫之路(14)--playwright浏览器自动化
爬虫·python·自动化
英英_9 小时前
python 自动化教程
开发语言·python·自动化
weixin-WNXZ021810 小时前
闲上淘 自动上货工具运行原理解析
爬虫·python·自动化·软件工程·软件需求
水银嘻嘻1 天前
12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建
运维·前端·自动化
厦门辰迈智慧科技有限公司1 天前
城市综合管廊监测与维护一体化解决方案
物联网·自动化·监测
sy_cora2 天前
IEEE 列表会议第五届机器人、自动化与智能控制国际会议
运维·人工智能·机器人·自动化
云手机管家2 天前
CDN加速对云手机延迟的影响
运维·服务器·网络·容器·智能手机·矩阵·自动化
云手机管家2 天前
账号风控突破:云手机设备指纹篡改检测与反制技术解析
android·运维·网络协议·网络安全·智能手机·矩阵·自动化
struggle20252 天前
AgenticSeek开源的完全本地的 Manus AI。无需 API,享受一个自主代理,它可以思考、浏览 Web 和编码,只需支付电费。
人工智能·开源·自动化