博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IE浏览器整页截屏程序(二)
阅读量:5251 次
发布时间:2019-06-14

本文共 2120 字,大约阅读时间需要 7 分钟。

 

在中,大家给出了不少建议,尤其是指出了截屏方法的不足之处。其实,使用上述方法去截屏也是逼不得已,因为公司实际项目需求中,还有其他一些要求,在此不便细说。如果仅仅为了截屏,我推荐大家直接用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的首页截图,看看效果(图片太大,压缩了一下,所以有点模糊):

转载于:https://www.cnblogs.com/lavezhang/archive/2012/05/26/2519646.html

你可能感兴趣的文章
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>