python搭建网站访问异常监测脚本方案
团队有个项目,部署在某国企的服务器上,采用了信创的架构。问题来了,极不稳定,经常发现网站访问不了,或者宕机了。于是就想自己用python做个访问脚本,只要有访问异常,就推送信息到微信上,以便及时处理。当然这个是不是以开发这个项目的技术角度来处理。只是站在用户的角度开发一个小工具,运行在本地电脑上(编者将python程序部署在阿里云服务器上)。以下描述实施步骤。
一、项目需求:
监测目标:B 网站
运行环境:放在 A 网站服务器(Linux/Windows 都支持)
时间规则:8点-10点,每15分钟确认一次。10点-18点每30分钟确认一次
超时判定:20 秒内未访问成功 = 异常
告警方式:自动发消息到微信
二、准备工作(5 分钟完成)
1. 开通微信告警(Server 酱,免费)
打开官网:https://sct.ftqq.com/
微信扫码登录
获取 SendKey(后面脚本要用到)
关注官方公众号,告警会直接推送到微信
2. 服务器安装 Python(几乎所有服务器都自带)
三、python源码
import time
import os
import traceback
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import urllib.request
import urllib.parse
# ====================== 【配置】 ======================
USERNAME = "你的账号"
PASSWORD = "你的密码"
SEND_KEY = "你的SendKey"
LOGIN_URL = "B网站域名/登录地址"
TARGET_URL = "B网站域名"
CHROME_DRIVER_PATH = r"D:\python\chromedriver.exe" #服务器安装chrome浏览器,并且检查版本后,下载chromedriver.exe并复制到该项目的位置。
# 稳定性设置
MAX_CHECK_TIME = 120 # 单次检测最大超时秒数(超过就重启)
LOG_DIR = "logs" # 日志文件夹
# ======================================================
# 自动创建日志目录
if not os.path.exists(LOG_DIR):
os.mkdir(LOG_DIR)
# 日志输出(自动按天生成)
def log(msg):
now = datetime.now()
date_str = now.strftime("%Y-%m-%d")
time_str = now.strftime("%Y-%m-%d %H:%M:%S")
log_file = os.path.join(LOG_DIR, f"check_{date_str}.log")
log_msg = f"[{time_str}] {msg}"
print(log_msg)
try:
with open(log_file, "a", encoding="utf-8") as f:
f.write(log_msg + "\n")
except:
pass
# 微信推送
def send_wechat(title, desp):
if not SEND_KEY:
return
try:
data = urllib.parse.urlencode({"title": title, "desp": desp}).encode()
req = urllib.request.Request(f"https://sctapi.ftqq.com/{SEND_KEY}.send", data=data)
with urllib.request.urlopen(req, timeout=10):
pass
except:
log("微信推送失败")
# 浏览器启动
def get_driver():
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("--disable-dev-shm-usage")
options.add_experimental_option("excludeSwitches", ["enable-automation", "enable-logging"])
service = Service(CHROME_DRIVER_PATH)
driver = webdriver.Chrome(service=service, options=options)
driver.implicitly_wait(20)
return driver
# 检测任务
def check():
driver = None
try:
log("开始检测...")
driver = get_driver()
driver.get(LOGIN_URL)
time.sleep(5)
driver.get(TARGET_URL)
time.sleep(3)
url = driver.current_url
if "login" not in url.lower():
log("✅ 访问正常(已绕过412)")
return True
else:
log("❌ 未登录成功")
send_wechat("网站告警", "未登录成功,可能会话失效")
return False
except Exception as e:
err = str(e)[:100]
log(f"❌ 检测异常:{err}")
send_wechat("网站监测异常", f"错误:{err}")
return False
finally:
try:
if driver:
driver.quit()
except:
pass
# 时间策略
def sleep_time():
h = datetime.now().hour
if 8 <= h < 10:
return 15 * 60
elif 10 <= h < 18:
return 30 * 60
else:
return 60 * 60
# 看门狗:超时自动重启
def run_with_watchdog():
while True:
try:
start = time.time()
check()
cost = int(time.time() - start)
log(f"单次检测完成,耗时{cost}秒")
# 超时保护
if cost > MAX_CHECK_TIME:
log(f"⚠️ 检测超时({cost}秒),即将重启")
os._exit(1)
except:
log(f"⚠️ 程序崩溃,准备重启:{traceback.format_exc()[:100]}")
time.sleep(5)
# 等待下一轮
wait = sleep_time()
log(f"等待 {wait//60} 分钟后下次检测\n")
time.sleep(wait)
if __name__ == "__main__":
log("===== 网站监测服务启动(稳定版 + 日志 + 自动重启)=====")
run_with_watchdog()四、说明
1. 自动日志
每天自动生成一个 log 文件
路径:
logs/check_2026-06-02.log记录:启动、成功、失败、错误、耗时
2. 崩溃自动重启
浏览器崩了 → 自动重启
网络异常 → 自动重试
不中断监测
3. 卡死自动重启
超过 120 秒没反应 → 强制重启
彻底杜绝卡死不动
4. 不重复启动
安全单例运行
不会开一堆浏览器
5. 异常自动告警
登录失败 → 告警
页面打不开 → 告警
程序崩溃 → 告警
五、补充说明:开机自启动python文件
1、创建一个启动脚本
2、新建一个文本文件,输入内容
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "py main.py", 0
Set WshShell = Nothing3、把文本文件另存为:start.vbs(保存类型:所有文件,编码:ANSI)
4、把这个 vbs 放到开机启动文件夹:
①按win+r
②输入
shell:startup
③把 start.vbs 拖进去,完成:服务器开机 → 自动后台运行脚本 → 自动定时检测 → 异常微信告警。
以上就是全部过程。结果如下

