【Selenium 屏幕截图】

文章目录


前言

Selenium 提供了截图相关的接口,既可以截取整个浏览器窗口,也可以对页面中的某个元素进行截图。本文将重点介绍 Selenium 中屏幕截图的使用方法,并演示如何按照"年月日时分秒"的时间格式自动保存图片文件,方便后续管理和追踪。


一、Selenium 中的截图是什么?

Selenium 的截图功能,本质上是将当前浏览器窗口或页面元素的视觉内容保存为图片文件。它常见的使用场景包括:

  • 自动化测试失败时保存错误现场
  • 页面回归测试时记录对比截图
  • UI 调试时快速查看页面渲染效果
  • 爬虫程序中保存关键页面内容
  • 定时任务中留存运行结果

在 Python Selenium 中,截图主要有两种常见方式:

  1. 整个页面截图:保存当前浏览器窗口的图片
  2. 元素截图:只保存某个指定元素的图片

其中,整个页面截图最常用,元素截图则更适合局部定位和问题分析。


二、实现整个页面截图

Selenium 提供了 save_screenshot() 方法,用于把当前浏览器窗口保存成图片。

1. 基本写法

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 创建浏览器配置
options = Options()
options.add_argument("--start-maximized")

driver = webdriver.Chrome(options=options)

# 打开网页
driver.get("https://www.example.com")

# 保存截图
driver.save_screenshot("page.png")

# 关闭浏览器
driver.quit()

2. 说明

save_screenshot("page.png") 会把当前页面截图保存为 page.png

这个方法返回一个布尔值:

  • True:截图保存成功
  • False:截图保存失败

也可以直接使用 get_screenshot_as_file(),它的作用和 save_screenshot() 很接近。

python 复制代码
success = driver.get_screenshot_as_file("page.png")
print(success)

三、按照日期时间格式保存截图

在实际项目中,如果截图文件一直叫 page.png,那么新的截图会覆盖旧文件,不方便排查历史问题。因此,更常见的做法是使用日期时间作为文件名。

例如保存成:

  • 20260412_153012.png
  • 20260412_153045.png

这样既能避免覆盖,又能清晰记录截图生成时间。

1. 生成日期时间字符串

Python 的 datetime 模块非常适合生成时间戳。

python 复制代码
from datetime import datetime

now_str = datetime.now().strftime("%Y%m%d_%H%M%S")
print(now_str)

输出示例:

python 复制代码
20260412_153012

格式说明:

  • %Y:四位年份
  • %m:两位月份
  • %d:两位日期
  • %H:24小时制小时
  • %M:分钟
  • %S:秒

2. 将时间戳作为文件名

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from datetime import datetime
import os

options = Options()
options.add_argument("--start-maximized")

driver = webdriver.Chrome(options=options)
driver.get("https://www.example.com")

# 创建保存目录
save_dir = "screenshots"
os.makedirs(save_dir, exist_ok=True)

# 生成时间戳文件名
filename = datetime.now().strftime("%Y%m%d_%H%M%S") + ".png"
filepath = os.path.join(save_dir, filename)

# 保存截图
driver.save_screenshot(filepath)

print(f"截图已保存:{filepath}")

driver.quit()

这段代码做了三件事:

  1. 创建截图目录 screenshots
  2. 使用当前时间生成文件名
  3. 将截图保存到指定目录中

四、只截取页面中的某个区域

除了整个页面截图,Selenium 还支持对单个元素截图。这在定位页面局部问题时特别有用,比如只想保存某个按钮、表单、提示框或错误信息。

1. 元素截图写法

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--start-maximized")

driver = webdriver.Chrome(options=options)
driver.get("https://www.example.com")

element = driver.find_element(By.TAG_NAME, "h1")
element.screenshot("title.png")

driver.quit()

2. 元素截图的特点

  • 只保存目标元素区域
  • 更适合局部问题定位
  • 文件大小通常比整页截图更小
  • 可用于 UI 自动化中的控件核验
相关推荐
小江的记录本19 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
张登杰踩19 小时前
DINOv2 with Registers 系列模型详解:Giant 版本规格、Register Token 机制与使用指南
python·numpy
隐于花海,等待花开20 小时前
9. Python 文件与输入输出 深度解析
python
小江的记录本20 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
梦想不只是梦与想20 小时前
Python中 Pydantic数据验证库
python·pydantic
008爬虫实战录21 小时前
【码上爬】 题十:魔改算法 堆栈分析,找加密值过程详解
前端·python·算法
人道领域21 小时前
Java基础热门八股总结:八种基本数据类型 + 装箱拆箱 + 缓存机制,(90%的Java新手都搞不清的装箱拆箱问题)
java·开发语言·python
机汇五金_21 小时前
专业的电脑机箱厂商
python
smileNicky21 小时前
Spring框架懒加载怎么实现?
python·spring·rpc
熊猫_豆豆21 小时前
麦克斯韦方程组(电磁效应Python展示)
开发语言·python·电磁感应·麦克斯韦方程组