在C#开发中,网页截图是很多项目会涉及到的功能需求,比如生成网页快照、自动化测试截图、内容存档等场景都需要用到。Playwright和Selenium作为主流的浏览器自动化工具,都提供了完善的网页截图能力,下面分别介绍两种工具的实现方式。

使用Playwright实现网页截图
环境准备
首先需要安装Playwright相关的NuGet包,在Visual Studio的NuGet包管理器中搜索安装Microsoft.Playwright,安装完成后还需要执行一次浏览器驱动的安装,确保Playwright可以正常调用浏览器。
核心实现代码
下面是使用Playwright截取指定网页全屏的完整代码示例:
using Microsoft.Playwright;
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 初始化Playwright
using var playwright = await Playwright.CreateAsync();
// 启动浏览器,这里使用Chromium内核,也可以替换为Firefox或者WebKit
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = true // 无头模式,不需要显示浏览器界面
});
// 创建新页面
var page = await browser.NewPageAsync();
// 导航到目标网页,这里以测试地址为例
await page.GotoAsync("https://ipipp.com/test-page");
// 执行截图,保存到指定路径,FullPage参数表示截取整个页面内容
await page.ScreenshotAsync(new PageScreenshotOptions
{
Path = "playwright_screenshot.png",
FullPage = true
});
Console.WriteLine("Playwright网页截图完成");
}
}
参数说明
Playwright的截图方法支持多个可选参数,常用的包括:
- Path:截图保存的本地路径,支持png、jpg等格式
- FullPage:是否截取整个滚动页面,默认值为false,只截取当前可视区域
- Clip:自定义截取的区域,可以指定x、y坐标和宽度高度,实现局部截图
- Type:截图格式,可选png或者jpeg,默认是png
使用Selenium实现网页截图
环境准备
使用Selenium需要先安装对应的NuGet包,根据使用的浏览器选择对应的驱动包,比如使用Chrome浏览器就安装Selenium.WebDriver和Selenium.Chrome.WebDriver,如果使用其他浏览器则替换为对应的驱动包。
核心实现代码
下面是使用Selenium截取网页的示例代码:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Drawing;
class SeleniumScreenshotDemo
{
static void Main(string[] args)
{
// 设置Chrome选项,开启无头模式
ChromeOptions options = new ChromeOptions();
options.AddArgument("--headless");
// 初始化Chrome驱动
using IWebDriver driver = new ChromeDriver(options);
// 导航到目标网页
driver.Navigate().GoToUrl("https://ipipp.com/test-page");
// 等待页面加载完成,这里简单等待2秒,实际场景可以根据需求使用显式等待
System.Threading.Thread.Sleep(2000);
// 截取整个页面的截图
Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
// 保存截图到本地
screenshot.SaveAsFile("selenium_screenshot.png", ScreenshotImageFormat.Png);
Console.WriteLine("Selenium网页截图完成");
// 关闭浏览器
driver.Quit();
}
}
局部截图实现
Selenium默认截图是可视区域,如果需要截取整个滚动页面或者局部区域,需要额外处理,比如截取整个页面的代码如下:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Drawing;
class SeleniumFullPageScreenshot
{
static void Main(string[] args)
{
ChromeOptions options = new ChromeOptions();
options.AddArgument("--headless");
using IWebDriver driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://ipipp.com/test-page");
System.Threading.Thread.Sleep(2000);
// 获取页面的完整高度和宽度
long scrollHeight = (long)((IJavaScriptExecutor)driver).ExecuteScript("return document.body.scrollHeight");
long scrollWidth = (long)((IJavaScriptExecutor)driver).ExecuteScript("return document.body.scrollWidth");
// 设置浏览器窗口大小为页面完整大小
driver.Manage().Window.Size = new Size((int)scrollWidth, (int)scrollHeight);
System.Threading.Thread.Sleep(500);
// 截图
Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
screenshot.SaveAsFile("selenium_fullpage_screenshot.png", ScreenshotImageFormat.Png);
Console.WriteLine("Selenium全屏截图完成");
driver.Quit();
}
}
两种工具的选择建议
在实际项目中选择工具可以参考以下维度:
| 对比维度 | Playwright | Selenium |
|---|---|---|
| 安装配置 | 自动管理浏览器驱动,配置更简单 | 需要手动匹配浏览器版本安装驱动,配置稍复杂 |
| 截图能力 | 原生支持全页截图,参数设置更灵活 | 默认只支持可视区域,全页截图需要额外处理 |
| 执行速度 | 基于较新的自动化协议,执行速度更快 | 相对较慢,尤其是复杂页面场景 |
| 兼容性 | 支持的浏览器版本较新,旧版本浏览器支持有限 | 支持更多旧版本浏览器,兼容性更好 |
| 生态成熟度 | 生态较新,社区资源相对较少 | 发展时间长,社区资源更丰富,问题解决更方便 |
如果是新项目,且不需要兼容旧版本浏览器,优先选择Playwright,实现更简单高效;如果是需要兼容旧浏览器,或者项目已经在使用Selenium生态,那么选择Selenium更合适。
C#PlaywrightSelenium网页截图修改时间:2026-06-21 13:00:42