c#抓取网页截屏代码

C# Winform 使用 PuppeteerSharp 进行网页截图、生成pdf等操作 基于原项目使用的WebVIew,控件老旧,并且功能不太优化,所以采用了PuppeteerSharp进行了重构。 阅读详情

来自:http://outofmemory.cn/code-snippet/1050/c-zhuaqu-wangye-jieping-code

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Threading;
using System.Windows.Forms;

public class WebsiteToImage
{
    private Bitmap m_Bitmap;
    private string m_Url;
    private string m_FileName = string.Empty;

    public WebsiteToImage(string url)
    {
        // Without file 
        m_Url = url;
    }

    public WebsiteToImage(string url, string fileName)
    {
        // With file 
        m_Url = url;
        m_FileName = fileName;
    }

    public Bitmap Generate()
    {
        // Thread 
        var m_thread = new Thread(_Generate);
        m_thread.SetApartmentState(ApartmentState.STA);
        m_thread.Start();
        m_thread.Join();
        return m_Bitmap;
    }

    private void _Generate()
    {
        var browser = new WebBrowser { ScrollBarsEnabled = false };
        browser.Navigate(m_Url);
        browser.DocumentCompleted += WebBrowser_DocumentCompleted;

        while (browser.ReadyState != WebBrowserReadyState.Complete)
        {
            Application.DoEvents();
        }

        browser.Dispose();
    }

    private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        // Capture 
        var browser = (WebBrowser)sender;
        browser.ClientSize = new Size(browser.Document.Body.ScrollRectangle.Width, browser.Document.Body.ScrollRectangle.Bottom);
        browser.ScrollBarsEnabled = false;
        m_Bitmap = new Bitmap(browser.Document.Body.ScrollRectangle.Width, browser.Document.Body.ScrollRectangle.Bottom);
        browser.BringToFront();
        browser.DrawToBitmap(m_Bitmap, browser.Bounds);

        // Save as file? 
        if (m_FileName.Length > 0)
        {
            // Save 
            m_Bitmap.SaveJPG100(m_FileName);
        }
    }
}

public static class BitmapExtensions
{
    public static void SaveJPG100(this Bitmap bmp, string filename)
    {
        var encoderParameters = new EncoderParameters(1);
        encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
        bmp.Save(filename, GetEncoder(ImageFormat.Jpeg), encoderParameters);
    }

    public static void SaveJPG100(this Bitmap bmp, Stream stream)
    {
        var encoderParameters = new EncoderParameters(1);
        encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
        bmp.Save(stream, GetEncoder(ImageFormat.Jpeg), encoderParameters);
    }

    public static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        var codecs = ImageCodecInfo.GetImageDecoders();

        foreach (var codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }

        // Return 
        return null;
    }
}


C#实现网页截图功能(附完整源码) 阅读详情

相关推荐

C#网页截图(不打开网页) 两种方式实现网页快照

两种方式实现网页快照,快速截屏网页,不必打开浏览器

c# 实现网页加载后将页面截取为长图片

背景 最近再做一个需求,需要对网页生成预览图,如下图 但是网页千千万,总不能一个个打开,截图吧;于是想着能不能使用代码来实现网页截图。其实要实现c#教程这个功能,无非就是要么实现一个仿真浏览器,要么调用系统浏览器,再进行截图操作。 代码实现 1、启用线程Thread void startPrintScreen(ScreenShotParam requestParam) { Thread thread = new Thread(new ParameterizedThreadStart(do_Pr

chinaherolts2008的博客 833

C# WebBrowser获取网页截图

C# WebBrowser获取网页截图 调用WebBrowser.DrawImage

C#网页 截图

using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Threading; using System.Windows.Forms; using System; namespace ConsoleApp1 { public class Captur...

david9779的博客 626

C#从零开始:自己实现窗口滚动截屏Win

滚动截屏看起来是"按一个键、等一会儿、出来一张长图"的简单操作,工程上要做的事情其实有相当多:滚动控制要走同步投递(SendInput也可以,但能同步阻塞、等目标窗口处理完再截图,不需要额外的"等渲染"延迟),overlay 自身的遮挡要通过挖洞规避,截图间隔要在"渲染完成"和"重叠区足够"之间找平衡。还有一条容易被忽略的前提:用户必须把鼠标光标放在选区内——因为多数现代应用的处理器会忽略携带的 lParam 坐标,调用取真实光标位置来决定滚哪个容器。拼接算法是这件事的主要难点。

qq_15506683的博客 262

c# 保存html中的图片,C#实现将网页保存成图片的网页拍照功能

本文实例主要实现了网页照相机程序的功能。C#实现将网页保存成图片格式,简单实现网页拍照,主要是基于ActiveX 组件的网页快照类,AcitveX 必须实现 IViewObject 接口。因此读者完全可扩展此类将其用于你的C#软件项目中。在此特别感谢作者:随飞提供的代码。主要功能代码如下:using System;using System.Collections.Generic;using Sys...

weixin_42525569的博客 484

截取屏幕图像并保存图片 根据Url获取当前网页的快照

通过Url截取网页的快照并保存本地 截取当前屏幕的快照

C#批量获取web网站html页面截图

通过网站url批量获取html页面截图,将网站的缩略图显示到listview里,边抓取边显示,支持进度条,listview项支持右键菜单

C#网页截屏小程序

C#写的网页截屏小工具 具体功能如下: 1、直接通过一个url地址截屏 2、通过读取txt文件里的url地址截取多个图片 (每个url用回车分隔) 3、通过读取一个文件夹里的所有txt文件区截屏 4、通过读取Domino库的url (很少用)

C#实现在网页中根据url截图并输出到网页的方法

主要介绍了C#实现在网页中根据url截图并输出到网页的方法,涉及C#网页浏览器及图片操作的相关技巧,需要的朋友可以参考下

c#网页截图

网页截图是很常见的实用功能,今天就为大家共享一个实现浏览器截图代码,主要程序代码如下所示: private void Form_Load(object sender, EventArgs e) {   //接收web url   string colle = string.Empty;   string url = string.Empty;   //获取进程调用传入的命令   s

山鹰的专栏 996

c#截屏木马,发送到邮箱

写在前面 技术本无罪,只是人性恶。我学习伤人技,只是为了不被人伤,而不是为了伤人。 本来是在研究外挂的,但是一不小心技能点点歪了,不过影响也不大,木马跟外挂本来就有很多共通之处。废话说完,进入正题: 我的思路如下: 1、截取屏幕,保存图片 2、装入邮件,发送 3、删除图片,毁尸灭迹 4、自启动 先来第一步:获得截屏图片(啊啊啊啊啊啊,好早就想这样不按格式来,可是他们老是说要注意格式...

m0_38046697的博客 1178

通过WebBrowser网页截图C#源码(抓取完整页面及首屏)

通过WebBrowser网页截图C#源码(抓取完整页面及首屏) 通过WebBrowser+PrintWindow实现了网页截图,内部使用了拼接的方式可以实现保存完整网页,也可保存第一屏,不过这种方式的潜在 bug是窗体不可最小化,否则为黑屏,而且也没有找到webbr...

weixin_30237281的博客 464

C#模拟QQ截屏功能

以利用Graphics类的CopyFromScreen方法来实现屏幕截取,舍弃了比较麻烦的API函数,只要几句代码就能实现了,而且这个这个方法能实现只抓取部分区域的屏幕,可以实现类似qq抓屏的功能。 复制C#代码保存代码using System;using System.Collections.Generic;using System.Text;using System

Akuma专栏 2574
上一篇: 各种AJAX方法的使用比较
下一篇: IBatisNet 学习---01
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值