How to get rendered html (processed by Javascript) in WebBrowser control?

前端 未结 5 499
深忆病人
深忆病人 2020-11-27 06:50

I have an ASP.NET page and some custom class that fetch specified webpage, and returns this page body.

protected String GetHtml()
{
          Thread thread =         


        
5条回答
  •  情歌与酒
    2020-11-27 07:41

    Here is one solution I found to get to the rendered HTML(DOM) after javascript was run:

    Place a WebBrowser control named webBrowser1 on the Form of class Form1.

    [Form1.cs[Design]]

    Then for code use:

    [Form1.cs]

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace WebBrowserTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.webBrowser1.ObjectForScripting = new MyScript();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                webBrowser1.Navigate("http://localhost:6489/Default.aspx");
            }
    
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                webBrowser1.Navigate("javascript: window.external.CallServerSideCode();");
            }
    
            [ComVisible(true)]
            public class MyScript
            {
                public void CallServerSideCode()
                {
                    var doc = ((Form1)Application.OpenForms[0]).webBrowser1.Document;
                }
            }
        }
    }
    

    Change the webBrowser1.Navigate("http://localhost:6489/Default.aspx") parameter in Form1_Load to the page whose DOM after being processed by javascript you wish to obtain.

    You can access the modified DOM in the CallServerSideCode() method, for example:

    doc.GetElementById("myDataTable");
    

    Or you can access the rendered HTML like this:

    var renderedHtml = doc.GetElementsByTagName("HTML")[0].OuterHtml;
    

提交回复
热议问题