You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#/.NET非WinForm环境下实现网站指定区域截屏的解决方案咨询

C# 无窗体网站指定区域截图解决方案

一、控制台项目Screen类不存在报错修复

你遇到的报错是因为控制台项目默认未加载System.Windows.Forms完整程序集,仅添加using指令无效,按项目类型对应修改即可:

  • .NET Framework 项目:
    右键项目 → 选择「添加引用」→ 程序集列表中勾选System.Windows.Forms和System.Drawing,保存后重新编译即可识别Screen类。
  • .NET Core/.NET 5+ 项目:
    打开项目根目录下的.csproj文件,替换为如下配置,开启WinForms相关依赖:
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <!-- 必须带-windows后缀,WinForms为Windows平台专属组件 -->
        <TargetFramework>net6.0-windows</TargetFramework>
        <UseWindowsForms>true</UseWindowsForms>
        <UseSystemDrawing>true</UseSystemDrawing>
      </PropertyGroup>
    </Project>
    

注意:原有代码基于CopyFromScreen实现,只能截取当前系统前台显示的屏幕内容,若目标网站窗口被遮挡/最小化/未打开,无法截取到对应内容,仅适合网站前台常驻显示的场景。

二、无需前台打开网站的后台截图方案

如果需要完全后台运行、不依赖前台窗口,可以使用无头浏览器方案Puppeteer Sharp,无需显示窗口即可加载网页、截取指定区域,适合嵌入第三方程序使用,实现步骤如下:

  1. 项目安装NuGet包:PuppeteerSharp
  2. 示例代码:
using PuppeteerSharp;
using System.Drawing;
using System.Threading.Tasks;

/// <summary>
/// 截取目标网站指定区域
/// </summary>
/// <param name="url">目标网站地址</param>
/// <param name="captureArea">要截取的区域坐标和尺寸</param>
/// <param name="savePath">截图保存路径</param>
async Task CaptureWebsiteArea(string url, Rectangle captureArea, string savePath)
{
    // 首次运行自动下载适配版本的无头Chromium,无需手动安装浏览器
    await new BrowserFetcher().DownloadAsync();
    using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
    {
        Headless = true, // 无头模式,不显示任何窗口
        Args = new[] { "--disable-gpu", "--no-sandbox" }
    });
    using var page = await browser.NewPageAsync();
    // 设置页面视口大小,覆盖需要截取的区域范围
    await page.SetViewportAsync(new ViewPortOptions
    {
        Width = 1920,
        Height = 1080
    });
    // 加载网页,等待网络空闲确保页面完全渲染
    await page.GoToAsync(url, WaitUntilNavigation.Networkidle2);
    // 截取指定区域并保存
    await page.ScreenshotAsync(savePath, new ScreenshotOptions
    {
        Clip = new ClipOptions
        {
            X = captureArea.X,
            Y = captureArea.Y,
            Width = captureArea.Width,
            Height = captureArea.Height
        },
        Type = ScreenshotType.Jpeg,
        Quality = 90
    });
}

// 调用示例
// await CaptureWebsiteArea("https://目标网站地址", new Rectangle(100, 100, 800, 600), @"E:\网站截图.jpg");

该方案无需前台打开浏览器,完全后台运行,不会被其他窗口干扰,还支持单独截取页面指定DOM元素、长页面滚动截取等扩展需求。

内容的提问来源于stack exchange,提问作者yousif fayed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:36:00