今天写的这个内容,主要是给自动化脚本补一块很多人忽略的功能:日志系统。
我以前写 selenium 脚本的时候,报错全靠 print()
,流程全靠猜,出问题要不是插一堆调试语句,要不就是翻控制台输出。后来干脆抽出一套轻量的日志封装,每一步操作、异常、截图路径,统统能打进 log 文件里,查问题就舒服太多了。
一、为啥一定要有日志系统?
原因很简单:
- 多线程、批量跑时:控制台输出混乱不堪,看不清谁错了
- 异步执行 / 定时任务:你根本看不到控制台输出,靠日志定位问题
- 远程执行 / CI/CD:日志是唯一你能留下的线索
- 调试失败截图:截图路径在哪,得靠日志记下来
- 流程记录回溯:做过什么操作,操作是否成功?print 满地都不靠谱
二、推荐两种方案
- 🧱 内置 logging:标准库,无依赖,略显繁琐
- 🪄 loguru:强烈推荐,语法简洁,功能强大,适合个人项目/中型脚本
下面我主要用 loguru
展示(你也可以自己替换为 logging
)
三、快速接入 loguru
安装:
pip install loguru
封装为 log_utils.py
(建议放在项目 utils 目录下):
from loguru import logger
import os
from datetime import datetime
def init_logger(log_dir="logs", log_name_prefix="auto"):
os.makedirs(log_dir, exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
log_path = os.path.join(log_dir, f"{log_name_prefix}_{timestamp}.log")
logger.add(log_path,
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}",
level="DEBUG",
rotation="10 MB",
retention="7 days",
encoding="utf-8")
return logger
然后在你的主脚本中用:
from log_utils import init_logger
logger = init_logger()
logger.info("开始执行测试脚本")
logger.debug("定位元素中...")
logger.error("找不到元素!")
每次运行,都会自动在 logs/
目录下生成一份带时间戳的 log 文件,按天 / 大小分割。
四、log + selenium 实战场景举例
失败截图 + 日志:
from selenium.common.exceptions import NoSuchElementException
try:
element = driver.find_element(By.ID, "search")
element.send_keys("test")
except NoSuchElementException:
take_screenshot(driver, "no_search_box")
logger.error("找不到搜索框,已截图保存")
测试步骤打日志:
logger.info("打开登录页")
driver.get("https://example.com/login")
logger.info("输入用户名/密码")
driver.find_element(By.ID, "user").send_keys("admin")
driver.find_element(By.ID, "pwd").send_keys("123456")
logger.info("点击登录按钮")
driver.find_element(By.ID, "login").click()
五、封装日志 + 关键流程更稳
你可以把每个关键操作包一层“安全操作 + 日志”:
def safe_click(driver, by, value, description="点击某个按钮"):
try:
element = driver.find_element(by, value)
element.click()
logger.info(f"{description} 成功")
except Exception as e:
take_screenshot(driver, "click_error")
logger.error(f"{description} 失败:{e}")
raise e
然后你在主流程中可以这样调用:
safe_click(driver, By.ID, "submit", "点击提交按钮")
日志里就能看到每一步的状态,图也拍好了,出错就有痕迹。
六、如果你坚持用 logging
呢?
也行,不过语法稍繁琐,初始化建议也抽封装一下。
import logging
def init_logging(log_file="auto.log"):
logging.basicConfig(
filename=log_file,
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
不多赘述,用 loguru 简洁得多,尤其在控制台 + 文件双输出、切片、日志等级上。
七、总结
自动化不打日志,就像开车不装仪表盘。
我建议任何写 selenium 自动化的人都把日志封装进自己的工具包里。配合失败截图、异常记录,能帮你跑得更稳、调得更快。