CefSharp截取完整网页图片,网页截图

Posted 棉晗榜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CefSharp截取完整网页图片,网页截图相关的知识,希望对你有一定的参考价值。

开发语言C#
框架集.net framework 4.6
需要安装nuget包CefSharp.OffScreen

参考使用CefSharp.OffScreen框架地址
https://github.com/cefsharp/CefSharp/blob/master/CefSharp.OffScreen.Example/Program.cs

将一个网页完整的页面通过代码生成图片

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using CefSharp;
using CefSharp.DevTools.Page;
using CefSharp.OffScreen;

namespace ConsoleApp_htmlScreenshot

    internal class Program
    
 
        static async Task Main(string[] args)
        
#if ANYCPU
            //Only required for PlatformTarget of AnyCPU
            CefRuntime.SubscribeAnyCpuAssemblyResolver();
#endif
            //要截取图片的网页URL
            const string testUrl = "https://list.jd.com/list.html?cat=670,671,1105";

            var settings = new CefSettings()
            
                //By default CefSharp will use an in-memory cache, you need to specify a Cache Folder to persist data
                //CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\\\Cache")
            ;

            //Perform dependency check to make sure all relevant resources are in our output directory.
            Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);

            // Create the offscreen Chromium browser.
            var browser = new ChromiumWebBrowser(testUrl);
            //browser.Size = new System.Drawing.Size(1920, 20000);

            //browser.FrameLoadEnd += (s, e) =>
            //    Console.WriteLine("1加载完成 "+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            //;

            //等待内容完成加载
            await browser.WaitForInitialLoadAsync();

            Console.WriteLine("2加载完成 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

            //网页截图保存地址
            string imgName = "CefSharp_screenshot" + DateTime.Now.Ticks + ".jpg";
            imgName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), imgName);

            try
            
                var cefbrowserHost = browser.GetBrowserHost();

                //You can call Invalidate to redraw/refresh the image
                cefbrowserHost.Invalidate(PaintElementType.View);

                //获取内容尺寸
                var contentSize = await browser.GetContentSizeAsync();
                var viewport = new Viewport
                
                    Height = contentSize.Height,
                    Width = contentSize.Width,
                    Scale = 1.0
                ;

                Console.WriteLine("截图...");
                //var buffer = await browser.CaptureScreenshotAsync();

                //完整网页截图
                //var buffer = await browser.CaptureScreenshotAsync(viewport: viewport);
                var buffer = await browser.CaptureScreenshotAsync(CaptureScreenshotFormat.Jpeg, 100, viewport);

                System.IO.File.WriteAllBytes(imgName, buffer);
                Console.WriteLine("截图保存完成");
            
            catch (Exception ex)
            
                string msg = ex.Message;
                Console.WriteLine("截图异常:" + msg);
            

            // We have to wait for something, otherwise the process will exit too soon.
            Console.ReadKey();

            // Clean up Chromium objects. You need to call this in your application otherwise
            // you will get a crash when closing.
            //The ChromiumWebBrowser instance will be disposed
            Cef.Shutdown();


        


    




以上是关于CefSharp截取完整网页图片,网页截图的主要内容,如果未能解决你的问题,请参考以下文章

html网页中图片横向滚动

html网页中图片横向滚动

火狐浏览器实用插件

求助:java web开发实现截图,客户机截取本机图片,上传到服务器

Chrome浏览器界面截图

Phantomjs - 截取网页截图