首页 > 其他分享 >.NET服务端网页截图

.NET服务端网页截图

时间:2024-05-06 15:34:39浏览次数:24  
标签:截图 网页 string chromePath savePath new NET 服务端

一. 引入PuppeteerSharp nuget包;

二. 服务端网页截图方法

public class WebPageUtil
    {
        /// <summary>
        /// 服务端网页截图
        /// </summary>
        /// <param name="url">网页URL</param>
        /// <param name="sleepSeconds">睡眠秒数:默认两秒,根据网页完整加载所需时间配置</param>
        /// <param name="viewPortOptions">默认生成移动端的430*932格式</param>
        /// <returns></returns>
        public static string WebPageScreenshot(string url,int sleepSeconds=2, ViewPortOptions viewPortOptions = null)
        {
            //初始化浏览器
            var fetcher = new BrowserFetcher().DownloadAsync("127.0.0.1").Result;
            string chromePath = App.Configuration["ChromePath"];
            chromePath = chromePath.IsNullOrEmpty() ? fetcher.GetExecutablePath() : chromePath;
            if (!File.Exists(chromePath))
            {
                throw FriendlyException.JNPFException.Oh($"在服务器上未找到Chrome浏览器\n{chromePath}");
            }
            var browser = Puppeteer.LaunchAsync(new LaunchOptions
            {
                Headless = true,
                ExecutablePath = chromePath,
                DefaultViewport = viewPortOptions ?? new ViewPortOptions { Width = 560, Height = 932, IsMobile = true }
            }).Result;
            // 创建一个页面对象
            var page = browser.NewPageAsync().Result;
            // 导航到指定的URL
            page.GoToAsync(url).Wait();
            //等待加载完成后截屏
            System.Threading.Thread.Sleep(sleepSeconds * 1000);
            //截图 FullPage是全屏
            string savePath = $"{FileVariable.TemporaryFilePath}{DateTime.Now:yyyyMMddHHmmssfff}.png";
            page.ScreenshotAsync(savePath, new ScreenshotOptions() { FullPage = true }).Wait();
            page.CloseAsync().Wait();
            browser.CloseAsync().Wait();
            return savePath;
        }

    }

三. 调用截图方法,返回文件地址文件名

 /// <summary>
        /// Web网页截图
        /// </summary>
        /// <param name="url">网页地址</param>
        /// <param name="sleepSeconds">等待网页完全加载时间(秒)</param>
        /// <param name="width">截图宽度</param>
        /// <param name="height">截图高度</param>
        /// <param name="isMobile">是否移动端网页</param>
        /// <returns></returns>
        public FileControlsModel WebPageScreenshot(string url, int sleepSeconds=2, int width= 1920, int height= 1080, bool isMobile= false)
        {
            string savePath = WebPageUtil.WebPageScreenshot(url,sleepSeconds,new PuppeteerSharp.ViewPortOptions { Width = width, Height = height, IsMobile = isMobile });
            var fileName = _userManager.UserId + "|" + savePath + "|png";
            var output = new FileControlsModel
            {
                fileId= Path.GetFileName(savePath),
                name = Path.GetFileName(savePath),
                url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "JNPF")
            };
            return output;
        }

 

标签:截图,网页,string,chromePath,savePath,new,NET,服务端
From: https://www.cnblogs.com/newcxf/p/18175078

相关文章

  • 入门学习Docker部署Vue+NetCore+MsSql
    最近vultr的主机经常忘了续租,导致账号被禁用,主机被删掉每次重新部署都忘了之前怎么弄的,要重新查好多资料每个月6美金的主机XShell连接主机IP先安装docker开启docker服务镜像容器tar文件 saveload dockerimagesdockercommitbuildDockerfilepull仓库 查看......
  • .net 6 栈的大小是多少
    .NET6中线程栈的默认大小并没有在官方文档中明确给出一个具体的数值,因为它可以根据操作系统、体系结构(32位或64位)以及线程启动时的特定条件有所不同。一般来说,对于托管代码,.NET中的线程栈大小默认是相对较大的,通常在1MB到1MB范围内,具体大小可能会根据操作系统的默认设置和可用......
  • ASP.NET Core Razor Pages 使用 视图(View) 组件
    参考文章地址:为什么要在ASP.NETCore中使用视图组件(telerik.com)为什么使用视图组件而不是分部视图?最大的原因是,在Razor页面中插入分部视图时,与调用View关联的所有ViewData都会自动与分部视图关联。这意味着分部视图在一个Razor页面上的行为可能与在另一个页面上的行......
  • C#的基于.net framework的Winform编程 - 编程手把手系列文章
          对于C#,笔者最早接触的是ASP.NET里的开发,后面对Winform程序也有一定的开发,但是真正理解和重新编码是这些年的事,在我的C#标签里有一些例子,记录了winform程序开发的一些功能。此文只是记录基于.netframework的用C#开发Winform程序的一个过程。1、安装VisualStud......
  • C#.NET体系图文概述—2024最全总结
    C#是一种简单、现代、面向对象和类型安全的编程语言。。.NET是由Microsoft创建的开发平台,平台包含了语言规范、工具、运行,支持开发各种应用,如Web、移动、桌面等。.NET框架有多个实现,如.NETFramework、.NETCore(及后续的.NET5+版本),以及社区版本Mono。除此以外,C#.NET体系还......
  • git 服务端
    1.安装gityuminstall-ygit2.查看版本git--version3.创建用户useraddgitpasswdgit 4.初始化仓库gitinit--bare/home/git/dataCollect.git 5.将拥有者改为gitgitinit--bare/home/git/dataCollect.git ......
  • dotnet 泛型委托 ACTION FUNC
    voidMain(){//泛型委托ACTIONFUNC//3.创建委托实例TestDele<string>testDele=newTestDele<string>(HellowDele);testDele("测试委托");//官方版本的泛型委托(不带返回值)Action<string>action=newAction<string>(HellowDele);......
  • .NET 8 的openEuler 容器镜像
    目前.NET8的容器镜像已经支持openEuler,以openEuler为基础镜像的应用镜像:dotnet-deps、dotnet-runtime和dotnet-aspnet。基础镜像简介这里存放着由openEuler官方提供的容器镜像,包含openEuler基础镜像、应用镜像。在这里,你可以参考对应镜像的介绍,部署你需要的镜像容器。开源项目......
  • 为什么我要使得GOLang重写SAAS(软件即服务)服务端
    引言“道”在中国哲学中,是一个重要的概念,表示“终极真理”。“道”这一概念,不单为哲学流派诸子百家所重视,也被宗教流派道教等所使用。大道至简的意思就是大道理是极其简单的,简单到一两句话就能说明白。所谓“真传一句话,假传万卷书”。正文在开启独立创作之路之前,我主要用不用......
  • Linux 下使用 NetLink 检测设备的热插拔
    一、简单介绍下NETLINK    netlink套接字是用以实现用户进程与内核(2.6.24之后的版本)进程通信的一种特殊的进程间通信(IPC),也是网络应用程序与内核通信的最常用的接口。二、为什么能用NETLINK检测设备热插拔    当我们的设备从主机上进行拔插时,内核会通过netlin......