• 用 ASP.NET 做网站截图(代码示例)


    一、添加引用

    在解决方案上单击右键,选择“Add Reference...”,添加“System.Windows.Forms”,添加完后,Web.Config 中应该有类似下面的内容:

    <system.web>
      <compilation debug="true">
        <assemblies>
          <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

    二、 设置 STA 模式

    在 @ Page 指令中加上 AspCompat="true",以强制该网页在 STA(单线程单元) 模式下执行。结果类似如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" AspCompat="true" %>

    三、写截图代码

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Windows.Forms;
     
    public partial class _Default : System.Web.UI.Page
    {
        private WebBrowser _webBrowser;
       
       
        protected void Page_Load(object sender, EventArgs e)
        {
            string url = Request.QueryString["url"];
            if (string.IsNullOrEmpty(url))
            {
                url = "http://www.cftea.com/";
            }
           
            _webBrowser = new WebBrowser();
            _webBrowser.ScrollBarsEnabled = false; //不显示滚动条
            _webBrowser.Navigate(url);
            _webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Completed);
           
            while (_webBrowser.ReadyState != WebBrowserReadyState.Complete)
            {
                System.Windows.Forms.Application.DoEvents(); //避免假死,若去掉则可能无法触发 DocumentCompleted 事件。
            }
        }
       
       
        public void Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //设置浏览器宽度、高度为文档宽度、高度,以便截取整个网页。
            _webBrowser.Width = _webBrowser.Document.Body.ScrollRectangle.Width;
            _webBrowser.Height = _webBrowser.Document.Body.ScrollRectangle.Height;
            using (Bitmap bmp = new Bitmap(_webBrowser.Width, _webBrowser.Height))
            {
                _webBrowser.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
                bmp.Save("C:\\Capture.png", ImageFormat.Png);
            }
        }
    }

    四、说明

    在调试时,若出错,应该停止 ASP.NET Development Server,重新运行,如果你用的是 IIS,可能需要重新启动 IIS(猜测是这样),否则 Navigate 那句会出错。

    有些网站抓下来是空白,还没有仔细研究过为什么。

  • 相关阅读:
    牛客练习赛64 D.宝石装箱 【容斥原理+背包DP】
    洛谷 P5212 SubString【SAM+LCT】
    洛谷 P4219 [BJOI2014]大融合【LCT】
    洛谷 P1501 [国家集训队]Tree II【LCT】
    洛谷 P5357 【模板】AC自动机(二次加强版)
    洛谷 P3690 【模板】Link Cut Tree (动态树)
    洛谷 P2463 [SDOI2008]Sandy的卡片【后缀数组】
    P3181 [HAOI2016]找相同字符【后缀数组】
    洛谷 SP705 【后缀数组】
    牛客小白月赛18 E.Forsaken的数列【Splay】
  • 原文地址:https://www.cnblogs.com/goody9807/p/1323112.html
Copyright © 2020-2023  润新知