当前位置: 首页 > 面试题库 >

如何在WebBrowser控件中获取呈现的html(由Javascript处理)?

逄岳
2023-03-14
问题内容

我有一个ASP.NET页和一些自定义类,这些类可获取指定的网页,并返回此页面主体。

protected String GetHtml()
{
          Thread thread = new Thread(new ThreadStart(GetHtmlWorker));
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();
    return docHtml;
}

protected void GetHtmlWorker()
{
    using (WebBrowser browser = new WebBrowser())
    {

                browser.ScriptErrorsSuppressed = true;
        browser.Navigate(_url);

        // Wait for control to load page
        while (browser.ReadyState != WebBrowserReadyState.Complete)
            Application.DoEvents();

        docHtml = browser.DocumentText;
    }

但是我需要的-它是DOM html而不是源代码,因为我通过jQuery在DOM上做了一些额外的操作。


问题答案:

这是我发现在运行javascript之后进入呈现的HTML(DOM)的一种解决方案

将一个名为webBrowser1的WebBrowser控件放在Form1类的Form上。

[Form1.cs [设计]]

然后用于代码使用:

[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;
            }
        }
    }
}

将Form1_Load中的webBrowser1.Navigate(“ http:// localhost:6489 /
Default.aspx

”)参数更改为您希望获取javascript处理后的DOM页面。

您可以在CallServerSideCode()方法中访问修改后的DOM,例如:

doc.GetElementById("myDataTable");

或者,您可以像这样访问呈现的HTML:

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


 类似资料:
  • 问题内容: 我已经试过了: scriptEl.InnerHtml和scriptEl.InnerText都给出错误: 有没有一种简单的方法可以将脚本注入dom? 问题答案: 由于某种原因,Richard的解决方案对我而言不起作用(insertAdjacentText失败,并带有异常)。但是,这似乎可行:

  • 问题内容: 我需要一个命令行工具(或Javascript / PHP,但我认为命令行是一种方式)来进行渲染并获取URL的渲染内容,但是重要的是我不仅要渲染CSS / Html / images,还要渲染Javascript。 例如,诸如“ renderengine http://www.google.es outputfile.html”之类的命令和网络内容(已解析的html和javascript

  • 我是这个世界的新手,并试图进入这个世界。我正在编写一个样式指南,需要显示一些HTML代码作为示例。我使用的是ReactPrism,我无法在PrismCode组件中获得HTML输出,我已经找到了一个解决方法,使用ReactToJSX来显示jsx代码而不是HTML。代码如下: 因此,基本上我希望将this.props.children(组件)呈现为HTML代码,而不是PrismCode中的内容,我甚至

  • 本文向大家介绍如何将WebBrowser控件放入IE9的HTML标准中?,包括了如何将WebBrowser控件放入IE9的HTML标准中?的使用技巧和注意事项,需要的朋友参考一下 要将WebBrowser控件放入IE9标准,您需要在HTML网页中添加以下行- 您也可以在Internet Explorer 9中尝试- 您也可以尝试使用Microsoft Edge-

  • 如何获得在呈现HTML页面的JTextPane中选择的一行文本(我所说的行是指呈现的文本中两个换行字符之间的任何文本,可见)的HTML源?

  • 我正试图从SQL Server导出一些数据作为HTML文件,但Internet explore将这些文件呈现得非常好,尽管chrome显示特殊字符。