适配你的业务快照监控场景:自动记录运行日志,发生异常时自动保存页面截图,程序结构规范,方便后续接入定时任务。
python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException, WebDriverException
import logging
import os
from datetime import datetime
# -------------------------- 配置区域 --------------------------
TARGET_URL = "https://xxx业务页面"
WAIT_SECONDS = 10
# 截图保存目录
SCREENSHOT_DIR = "./screenshot"
# 日志保存目录
LOG_DIR = "./log"
# -------------------------------------------------------------
# 创建文件夹
os.makedirs(SCREENSHOT_DIR, exist_ok=True)
os.makedirs(LOG_DIR, exist_ok=True)
# 日志配置
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler(f"{LOG_DIR}/selenium_run.log", encoding="utf-8"),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
def get_chrome_driver() -> webdriver.Chrome:
"""获取无头Chrome驱动"""
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
# 关闭图片加载可进一步提速(可选)
# chrome_options.add_argument("--blink-settings=imagesEnabled=false")
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options
)
driver.set_page_load_timeout(30)
driver.implicitly_wait(2)
return driver
def save_screenshot(driver: webdriver.Chrome, mark: str):
"""保存截图,文件名带时间戳"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{SCREENSHOT_DIR}/{mark}_{timestamp}.png"
try:
driver.save_screenshot(filename)
logger.info(f"截图已保存:{filename}")
except Exception as e:
logger.error(f"截图保存失败: {str(e)}")
def run_page_check():
driver = None
try:
driver = get_chrome_driver()
logger.info(f"开始访问页面:{TARGET_URL}")
driver.get(TARGET_URL)
# 等待页面核心容器加载,根据你的页面修改定位器
WebDriverWait(driver, WAIT_SECONDS).until(
EC.presence_of_element_located((By.ID, "main-container"))
)
logger.info("页面核心元素加载完成")
# 正常页面快照
save_screenshot(driver, "normal")
# 这里可以增加业务校验逻辑,例如读取页面文本、校验状态
# text = driver.find_element(By.ID, "status").text
# assert "正常" in text
except TimeoutException:
logger.error("页面等待超时")
if driver:
save_screenshot(driver, "timeout_error")
except NoSuchElementException:
logger.error("找不到页面元素")
if driver:
save_screenshot(driver, "element_error")
except WebDriverException as e:
logger.error(f"浏览器驱动异常:{str(e)}")
if driver:
save_screenshot(driver, "driver_error")
except Exception as e:
logger.error(f"未知异常:{str(e)}", exc_info=True)
if driver:
save_screenshot(driver, "unknown_error")
finally:
if driver:
driver.quit()
logger.info("浏览器已关闭")
if __name__ == "__main__":
run_page_check()
使用说明
- 修改配置区:
TARGET_URL替换为你的业务页面;By.ID, "main-container"修改为页面上代表页面加载完成的核心元素 - 运行后自动生成两个文件夹:
log日志文件、screenshot截图文件 - 正常访问 :生成
normal_时间戳.png;异常:自动保存对应错误类型截图,便于问题排查 - 日志同时输出到控制台+本地文件,方便长期运维审计