如何使用C#在Internet Explorer中读取当前页面的HTML

本文关键字:当前页 读取 HTML Explorer 何使用 Internet | 更新日期: 2023-09-27 18:26:40

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

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

如何使用C#在Internet Explorer中读取当前页面的HTML

我建议您枚举IE窗口,然后从中提取内容。导入WinAPI f-tions以在托管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。但我不知道如何:)

试试这个代码:

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;

我认为您无法从单独的应用程序与IE通信。

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

从未对IE 进行过此操作

听起来很棘手。我不知道你的申请有什么意义。所以,我脑海中浮现出一些想法:

你可以试试嗅探器。这可能至少适用于未加密的连接。所以快速而肮脏:使用嗅探器找出目标页面,在应用程序中使用例如WebBrowser类再次调用该页面,并分别获得"呈现的HTML"(你的意思是"内部HTML"吗?)。

也许它也可以通过IE插件将html传递给你的应用程序?