文档参考:

https://www.cnblogs.com/zuqing/p/5698060.html

在此基础上对其进行了部分优化,增加了超时处理、偏移量、不显示脚本弹窗处理

项目引用程序集:

Microsoft.mshtml

System.Windows.Forms.dll

创建WebSnapshotsHelper类

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;namespace WebSnapshots
{public class WebSnapshotsHelper{Bitmap m_Bitmap;string m_Url;int m_BrowserWidth, m_BrowserHeight, m_SnapWidth, m_SnapHeight;int m_OffsetX, m_OffsetY;int m_Timeout;private WebSnapshotsHelper(string Url, int BrowserWidth, int BrowserHeight, int SnapWidth, int SnapHeight, int OffsetX, int OffsetY, int Timeout){m_Url = Url;m_BrowserHeight = BrowserHeight;m_BrowserWidth = BrowserWidth;m_SnapWidth = SnapWidth;m_SnapHeight = SnapHeight;m_OffsetX = OffsetX;m_OffsetY = OffsetY;m_Timeout = Timeout;}/// <summary>/// GetWebSiteThumbnail/// </summary>/// <param name="Url">目标网络地址</param>/// <param name="BrowserWidth">浏览器宽度</param>/// <param name="BrowserHeight">浏览器高度</param>/// <param name="SnapWidth">截图的宽度</param>/// <param name="SnapHeight">截图的高度</param>/// <param name="OffsetX">截图偏移量,从左边X处开始截图</param>/// <param name="OffsetY">截图偏移量,从上边Y处开始截图</param>/// <param name="Timeout">超过N秒后即超时,Bitmap返回null</param>/// SnapWidth+OffsetX不能大于SnapWidth,SnapHeight+OffsetY不能大于SnapHeight/// <returns></returns>public static Bitmap GetWebSiteThumbnail(string Url, int BrowserWidth, int BrowserHeight, int SnapWidth, int SnapHeight, int OffsetX=0,int OffsetY=0,int Timeout=60){WebSnapshotsHelper thumbnailGenerator = new WebSnapshotsHelper(Url, BrowserWidth, BrowserHeight, SnapWidth, SnapHeight, OffsetX, OffsetY, Timeout);return thumbnailGenerator.GenerateWebSiteThumbnailImage();}private Bitmap GenerateWebSiteThumbnailImage(){Thread m_thread = new Thread(new ThreadStart(_GenerateWebSiteSnapImage));m_thread.SetApartmentState(ApartmentState.STA);m_thread.Start();m_thread.Join();return m_Bitmap;}private void _GenerateWebSiteSnapImage(){WebBrowser m_WebBrowser = new WebBrowser();m_WebBrowser.ScrollBarsEnabled = false;//获取或设置一个值,该值指示 WebBrowser 是否显示对话框,如脚本错误消息。//如果控件不显示其对话框,则为 true;否则为 false。 默认值为 false。m_WebBrowser.ScriptErrorsSuppressed = true;m_WebBrowser.Navigate(m_Url);m_WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);DateTime dateFrom = DateTime.Now;DateTime dateTo;while (m_WebBrowser.ReadyState != WebBrowserReadyState.Complete || m_WebBrowser.IsBusy){dateTo = DateTime.Now;if ((dateTo - dateFrom).TotalSeconds < m_Timeout){Application.DoEvents();}else{break;}}m_WebBrowser.Dispose();}private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){WebBrowser m_WebBrowser = (WebBrowser)sender;m_WebBrowser.ClientSize = new Size(this.m_BrowserWidth, this.m_BrowserHeight);m_WebBrowser.ScrollBarsEnabled = false;m_Bitmap = new Bitmap(m_BrowserWidth, m_BrowserHeight);m_WebBrowser.BringToFront();m_WebBrowser.DrawToBitmap(m_Bitmap, m_WebBrowser.Bounds);Rectangle rClipRect = new Rectangle(m_OffsetX, m_OffsetY, m_SnapWidth, m_SnapHeight);m_Bitmap = m_Bitmap.Clone(rClipRect, m_Bitmap.PixelFormat);m_Bitmap = (Bitmap)m_Bitmap.GetThumbnailImage(m_SnapWidth, m_SnapHeight, null, IntPtr.Zero);}}
}

测试用例:

url = "http://www.cnblogs.com/";
Bitmap m_Bitmap = WebSnapshotsHelper.GetWebSiteThumbnail(url, 1920, 1080, 1000, 580, 0, 0, 60); //宽高根据要获取快照的网页决定
m_Bitmap.Save("snap_image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); //图片格式可以自由控制
m_Bitmap.Dispose();
System.Diagnostics.Process.Start("snap_image.jpg");

C#通过WebBrowser对网页截图相关推荐

  1. C#实现网页截图功能

    //需要添加System.Drawing及System.Windows.Forms引用 using System; using System.Drawing; using System.Drawing ...

  2. java web 截图_如何以Java实现网页截图技术

    今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...

  3. java url 缩略图_java根据url生成网页截图,缩略图 | 学步园

    public class ShotsPic extends JPanel { private static final long serialVersionUID = 1L; // 行分隔符 fina ...

  4. 如何以Java实现网页截图技术

    今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...

  5. [IE9] 解决了傲游、搜狗浏览器在IE9下网页截图的问题

    因为IE9直接使用硬件图形接口D2D/DWrite进行网页渲染,所以使用基于GDI的函数访问IE9的时候会出现问题. 目前国内的浏览器(如:傲游,搜狗)都是使用GDI函数来实现网页截图的, 当IE内核 ...

  6. html2canvas 截图div_浏览器端网页截图方案详解

    简介 剖析流行的截图插件 html2canvas 的实现方案,探索其功能上的一些不足之处及不能正确截取的一些场景,比如不支持 CSS 的 box-shadow 截取情况等.探索一种新的实现方式,能够避 ...

  7. 网页截图工具CutyCapt

    网页截图工具CutyCapt CuteCapt是Kali Linux提供的一款网页截图工具.该工具运行在命令行中,可以将WebKit引擎解析的网页保存为图片.它保存的文件支持矢量图和位图两大类型,共1 ...

  8. 有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务

    更多云原生技术资讯可关注阿里巴巴云原生技术圈. Puppeteer 是什么? puppeteer 官网的介绍如下: Puppeteer is a Node library which provides ...

  9. 使用PhantomJS实现网页截图服务

    使用PhantomJS实现网页截图服务 2015-12-12来源:Java教程人气:99 这是上半年遇到的一个小需求,想实现网页的抓取,并保存为图片.研究了不少工具,效果都不理想,不是显示太差了(Ca ...

  10. 用webBrowser打开网页出现脚本错误怎么办

    当IE浏览器遇到脚本错误时,在浏览器左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框.我们在用webBrowser编写的程序打开网页,遇到脚本有问题是,会弹出一个错误 ...

最新文章

  1. R语言威布尔分布函数F Distribution(dweibull, pweibull, qweibull rweibull )实战
  2. eclipse 快捷键文件地址
  3. 【Vue Laravel-mix】Error with Vue lazy loading components: “Failed to resolve async component“
  4. 跟着MJExtension实现简单的字典转模型框架 - 简书
  5. python3编程题_Python3简单面试编程题
  6. 一直在纠结怎样取出 combox 控件elect的文字
  7. 服务的协作:服务间的消息传递——《微服务设计》读书笔记
  8. 通过经典题目来理解多种闭包实现方式
  9. 简单SQL的增、删、改、查语句
  10. 数据上传需要什么硬件_搭建云服务器需要什么硬件配置
  11. 配置百度云CDN加速
  12. I2S协议-一篇文章带你了解
  13. Linux挂载Linux网络共享文件夹
  14. CIS 流程图 UML
  15. Java快速对接微信登录
  16. SOFA Weekly | MOSNSOFARPC 发布、社区活动报名
  17. 翟菜花:睡眠里的经济掘金
  18. 微信游戏,微信小说系统域名防封是如何做到的
  19. 苏轼:醉笑陪君三万场 不诉离殇
  20. 手机数据恢复华为荣耀X1智能手机32G内置存储手机严重损坏恢复照片聊天记录文档...

热门文章

  1. 2023年计算机考研需要考哪些科目?
  2. 学习|Android使用TTS语音合成
  3. 亿能bms上位机_BMS_CAN 基于USBCAN的BMS上位机软件,VC CSharp C#编程 238万源代码下载- www.pudn.com...
  4. 人工智能迅猛发展,如何应对避免失业?
  5. excel学习1:合并两个单元格,并把内容用符号隔开。
  6. 如何让小孩练得一手好字?这5个小方法,家长不妨试试
  7. xp系统计算机怎么连接到网络打印机,xp打印机共享怎么设置(教你如何在电脑上连接XP系统的共享打印机)...
  8. 13 个 Python 必备的知识,建议收藏!
  9. 特殊回文数 C++解法
  10. Excel同时冻结多行多列