如何使用C#在Internet Explorer中读取当前页面的HTML
本文关键字:当前页 读取 HTML Explorer 何使用 Internet | 更新日期: 2023-09-27 18:26:40
我检查了关于使用c#访问网站的不同问题。然而,我的问题有点不同。是否可以使用c#代码在internet explorer中读取当前打开的页面?
这个想法是在c#中有一个独立的应用程序来观察当前打开的IE页面。因此,我不想在应用程序内部访问页面,只想查看打开的任何页面,并读取其中呈现的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传递给你的应用程序?