Selenium 工程化模板(日志+异常截图,可直接复制使用)

适配你的业务快照监控场景:自动记录运行日志,发生异常时自动保存页面截图,程序结构规范,方便后续接入定时任务。

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()

使用说明

  1. 修改配置区:TARGET_URL 替换为你的业务页面;By.ID, "main-container" 修改为页面上代表页面加载完成的核心元素
  2. 运行后自动生成两个文件夹:log 日志文件、screenshot 截图文件
  3. 正常访问 :生成 normal_时间戳.png;异常:自动保存对应错误类型截图,便于问题排查
  4. 日志同时输出到控制台+本地文件,方便长期运维审计
相关推荐
前端精髓10 分钟前
langchain 短期记忆(状态)动态运行时上下文
python·langchain
最强小杰1 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
DeepVisionary1 小时前
为拿并网许可,OpenAI在佐治亚新园区同意高峰期断电三成
python·自动化
VIP_CQCRE2 小时前
内容自动化越跑越乱?先补上状态、去重和失败恢复
python·ai·工作流·幂等设计·内容自动化
我喜欢就喜欢2 小时前
RAG 重排序 Rerank 实战:用 bge-reranker 把 Top-K 命中率拉回来
python·大模型·向量检索·rag·rerank
专注仿真3 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
isfox3 小时前
Python3 协程:异步编程的核心机制与实战
python
用户298698530143 小时前
Python 将 Markdown 批量转为 HTML:单文件与目录遍历两种实现
python·html·markdown
miofly3 小时前
GitHub 今日推荐|auto-ontology:给 Agent 装上企业数据的语义索引
python·开源·github