自动化网页检测提醒

自动化网页检测提醒

一、前言

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

二、适用场景

  • 企业公告监测
    及时获取政策更新、系统维护通知
  • 电商价格追踪
    监控竞品价格波动或促销活动
  • 数据看板监控
    实时感知业务指标异常(如订单量骤降)
  • 内容合规审查
    检测网页敏感词或非法内容
  • 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)
  • 审计追溯:完整记录变更历史与通知日志
相关推荐
Yeats_Liao2 小时前
评估体系构建:基于自动化指标与人工打分的双重验证
运维·人工智能·深度学习·算法·机器学习·自动化
好好学习天天向上~~3 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
骆驼爱记录6 小时前
Word样式检查器使用指南
自动化·word·excel·wps·新人首发
XiaoMu_0016 小时前
自动化漏洞扫描与预警平台
运维·网络·自动化
生而为虫7 小时前
[Windows] 【浏览器自动化精灵V1.0】用Excel表格控制浏览器的自动化
运维·自动化
淡忘_cx9 小时前
使用Jenkins自动化部署vue项目(2.528.2版本)
vue.js·自动化·jenkins
风指引着方向9 小时前
昇腾 AI 开发生产力工具:CANN CLI 的高级使用与自动化脚本编写
运维·人工智能·自动化
掌心向暖RPA自动化9 小时前
影刀RPA如何在网页和桌面软件中实现自动滚动长截图?最好同时支持横向滚动纵向滚动的?
经验分享·自动化·影刀rpa·长截图
淡忘_cx9 小时前
使用Jenkins自动化部署spring-java项目+宝塔重启项目命令(2.528.2版本)
java·自动化·jenkins
种时光的人9 小时前
CANN生态自动调优:cann-auto-tune 让AIGC大模型性能优化自动化、极致化
性能优化·自动化·aigc