整页截图 / base64 / 元素级截图(Selenium 4.0+)
save_screenshot / as_base64 / as_png 三种 API + 元素级截图
save_screenshot("x.png") · get_screenshot_as_base64() · get_screenshot_as_png() · element.screenshot()save_screenshot 保存为文件 · get_screenshot_as_file / base64 / png 三种格式;元素级截图 save_screenshot(element)。
driver 级截图都是视口截图(viewport)——只截取当前视口的浏览器内容可见区域,不包含浏览器 UI(地址栏、标签栏、工具栏),也不会自动滚动去截上下方的内容!全页截图需 headless Chrome --full-page-screenshot 或 JS 滚动拼接。
# 截图 4 种方式
driver.save_screenshot("page.png") # 方式 1:最常用
driver.get_screenshot_as_file("page.png") # 方式 2:等价写法
b64 = driver.get_screenshot_as_base64() # 方式 3:返回 base64 字符串(邮件/API 上传)
png = driver.get_screenshot_as_png() # 方式 4:返回 PNG bytes
# 元素级截图(Selenium 4)
el = driver.find_element(By.ID, "demoInput")
el.save_screenshot("element.png")
# ✅ 最佳实践:截图 + 时间戳命名
import os, time
name = f"fail_{int(time.time())}.png"
driver.save_screenshot(os.path.join("screenshots", name))
save_screenshot() / get_screenshot_as_file() / get_screenshot_as_png() → 对比生成文件的大小.mb-logo("AT"圆形 logo)或 #shotMockBtn("登录 / 注册"按钮),直接 el.save_screenshot("logo.png"),验证它只截元素本身不是整页driver.get_screenshot_as_base64() 实战:拿到 base64 字符串 → import base64; open("shot.png","wb").write(base64.b64decode(b64_str)) 解码保存 → 对比和 save_screenshot() 生成的文件是否一样大;再用它拼一个 HTML:f'<img src="data:image/png;base64,{b64_str}">',直接把截图嵌进测试报告正文driver.execute_cdp_cmd("Page.captureScreenshot", {"captureBeyondViewport": True}),拿到 base64 后自己解码存文件,对比视口和整页截图的差异