• IE浏览器整页截屏程序(二)


    上一篇随笔中,大家给出了不少建议,尤其是指出了截屏方法的不足之处。其实,使用上述方法去截屏也是逼不得已,因为公司实际项目需求中,还有其他一些要求,在此不便细说。如果仅仅为了截屏,我推荐大家直接用WebBrowser控件来实现,非常简单。

    实现步骤如下:

    (1)新建一个Form应用程序,在窗体上添加一个Panel,假设Name为panel1,设置:panel1.AutoScroll=true。

    (2)在panel1中放置一个WebBrowser控件,假设Name为webBrowser1,设置:webBrowser1.ScriptErrorsSuppressed = true;(禁止弹出脚本错误框)

    (3)注册webBrowser1.DocumentCompleted事件,当页面加载完毕后,将webBrowser1的大小设置为和页面一样大。这是最关键的地方,否则就只能截取可见部分了

    (4)最后,调用webBrowser1.DrawToBitmap方法,将页面画到Bitmap上,然后保存为图片文件。

    C#源代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WebBrowserTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                webBrowser1.Navigate(textBox1.Text);
            }
    
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (e.Url.Equals(textBox1.Text))
                {//这里比较麻烦,有些网站并不满足这个条件:webBrowser1.ReadyState == WebBrowserReadyState.Complete
                    //将WebBrowser控件设置为和页面一样大(这步很关键,否则只能截取到可见部分)
                    Size rc = webBrowser1.Document.Body.ScrollRectangle.Size;
                    webBrowser1.Width = rc.Width + SystemInformation.VerticalScrollBarWidth;
                    webBrowser1.Height = rc.Height + SystemInformation.HorizontalScrollBarHeight;
    
                    //将页面画到一个画布上,然后另存为图片
                    using (Bitmap bitmap = new Bitmap(webBrowser1.Width, webBrowser1.Height))
                    {
                        webBrowser1.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height));
                        bitmap.Save(@"d:\capture.png");
                    }
                    MessageBox.Show("OK");
                }
            }
        }
    }


    【总结】

    使用WebBrowser控件也有不足之处,比方说:

    1、DocumentCompleted状态判断不稳定;

    2、弹出窗口不好过滤。

    3、必须依赖Form窗口。

    此外,WebBrowser控件是基于IE内核的,也有的朋友采用的是基于WebKit内核的浏览器组件,用起来也挺方便的。欢迎大家继续指正。

    最后给出sina.com.cn的首页截图,看看效果(图片太大,压缩了一下,所以有点模糊):

  • 相关阅读:
    Linux设备驱动阻塞与非阻塞I/O
    Linux设备驱动轮询操作
    Linux设备驱动中的并发控制
    Python趣味入门8:集合变量列表、集合、元组、字典
    买我的《Python青少年趣味编程》给寒假爱编程的小朋友一点温暖。
    第56篇ProfileData与DataLayout
    第59篇编译策略
    第60篇获取编译任务
    第63篇解释器与编译器适配(二)
    第57篇profile实例
  • 原文地址:https://www.cnblogs.com/lavezhang/p/2519646.html
Copyright © 2020-2023  润新知