【问题标题】:How can I read the rendered HTML of the current page in Internet Explorer using C#?如何使用 C# 在 Internet Explorer 中读取当前页面的呈现 HTML?
【发布时间】:2012-03-02 14:02:28
【问题描述】:

我检查了有关使用 c# 访问网站的不同问题。但是,我的问题有点不同。是否可以使用 c# 代码读取 Internet Explorer 中当前打开的页面?

这个想法是在 C# 中创建一个独立的应用程序来观察当前打开的 IE 页面。因此,我不想在应用程序内部访问页面,而只想查看打开的任何页面,并读取其中呈现的 html。

【问题讨论】:

  • 这将是一个客户端应用程序吗?
  • 可以读取当前渲染页面的html;但是,您无法阅读“渲染”的 html(这意味着什么)。您可能需要的是访问实际页面的对象模型。
  • 这不就是 IE 开发工具的用途吗?

标签: c# html browser


【解决方案1】:

我建议您枚举您的 IE 窗口,然后从中提取内容。像这样。导入 WinAPI 函数以在托管 C# 代码中使用:

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, IntPtr windowTitle);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

然后简单列出它们:

    StringBuilder sb = new StringBuilder(1024);
    // Loop all parent windows
    while((hWindow = FindWindowEx(IntPtr.Zero, hWindow, null, IntPtr.Zero)) != IntPtr.Zero)
    {
        GetWindowText(hWindow, sb, sb.MaxCapacity);
        // Interested in Chrome only :)
        if( sb.ToString().Contains("Google Chrome") )
        {
            Console.WriteLine(sb.ToString());
        }
    }

然后你需要从窗口中提取 HTML。但我不知道怎么做:)

【讨论】:

  • 网站应该在一个控件中呈现,该控件应该可以由 GetChildWindows 枚举。调用 value 属性可能值得一试
【解决方案2】:

试试这个代码:

static string GetHtmlPage(string strURL)
{

  String strResult;
  WebResponse objResponse;
  WebRequest objRequest = HttpWebRequest.Create(strURL);
  objResponse = objRequest.GetResponse();
  using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
  {
    strResult = sr.ReadToEnd();
    sr.Close();
  }
  return strResult;
}

导入这两个命名空间:

using System.Net;
using System.IO;

【讨论】:

  • OP 询问是否从已打开的 IE 实例中读取 DOM。你的回答没有做到这一点。
【解决方案3】:

我认为您不能从单独的应用程序与 IE 进行通信。

您可以将 HTTP 请求响应流嵌入到您编写的应用程序中,甚至可以将浏览器嵌入到应用程序中,我使用实际上复制 Chrome 的 Chromium 浏览器做了类似的事情。

从来没有为 IE 做过

【讨论】:

    【解决方案4】:

    听起来很棘手。我不知道你的申请有什么意义。 所以,我想到了一些想法:

    您可以尝试sniffer。这可能至少适用于非加密连接。 如此快速和肮脏:使用嗅探器找出目标页面,在您的应用程序中使用例如再次调用该页面WebBrowser 类并分别获取“渲染的 HTML”(您的意思是“内部 HTML”吗?)。

    也许它也可以通过 IE plugin 将 html 传递给您的应用程序?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-04
      • 2010-09-13
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多