自动化网页检测提醒

自动化网页检测提醒

一、前言

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

二、适用场景

  • 企业公告监测
    及时获取政策更新、系统维护通知
  • 电商价格追踪
    监控竞品价格波动或促销活动
  • 数据看板监控
    实时感知业务指标异常(如订单量骤降)
  • 内容合规审查
    检测网页敏感词或非法内容
  • 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)
  • 审计追溯:完整记录变更历史与通知日志
相关推荐
成都纵横智控科技官方账号4 小时前
工业路由器和工业交换机,打造高效稳定的工业网络?
网络·物联网·自动化
李狗蛋儿啊12 小时前
zero自动化框架搭建---Git安装详解
运维·git·自动化
Mike_1887027835118 小时前
1688代采下单API接口使用指南:实现商品采集与自动化下单
前端·python·自动化
zy2152151 天前
钉钉机器人开发实战:快速实现消息通知自动化
机器人·自动化·钉钉
3DVisionary1 天前
XTOM-TRANSFORM自动化三维测量系统用于汽车零部件质量控制
运维·人工智能·python·自动化·汽车·数字图像相关dic技术·三维弯管在线检测系统
起个破名想半天了1 天前
Web自动化之Selenium 超详细教程(python)
python·selenium·自动化
前端郭德纲2 天前
前端自动化部署的极简方案
运维·前端·自动化
半导体守望者2 天前
OSAKA CI 49 MICROPROCESSOR-BASED DIGITAL ELECTRONIC PULSE COUNTER
经验分享·笔记·功能测试·自动化·制造
CASAIM2 天前
CASAIM与韩国DOOSAN集团达成合作,开启工业制造自动化检测新篇
计算机视觉·3d·自动化