c# - 在 WebBrowser 的另一个域的 iFrame 中获取文本的任何解决方法?

标签 c# winforms webbrowser-control mshtml shdocvw

你可能首先会想到是不可能的,因为XSS的限制。但我正在尝试从托管 WebBrowser 的应用程序访问此内容,而不是从站点中的 javascript 代码。

我知道不可能也不应该通过非 hacky 方式从 javascript 访问此内容,因为这将是一个很大的安全问题。但是从托管 WebBrowser 的应用程序中获得此限制是没有意义的。如果我想获取我的应用程序用户的 Facebook 信息,我可以执行 Navigate("facebook.com") 并在其中做任何我想做的事。这是托管 WebBrowser 而非网页的应用程序。

此外,如果您使用 Google Chrome 浏览器访问任何包含 iFrame 的网页,该 iFrame 的来源在另一个域中,然后右键单击其内容并单击“检查元素”,它会向您显示该内容。更简单的是,如果您导航到包含另一个域中的 iFrame 的任何网页,您将看到其内容。如果您可以在 WebBrowser 上看到它,那么您应该能够以编程方式访问它,因为它必须位于内存中的某个位置。

有没有办法,不是来自 DOM 对象,因为它们似乎基于与 javascript 相同的引擎,因此受到 XSS 限制,而是来自一些更底层的对象,例如 MSHTMLSHDocVw,访问此文本?

最佳答案

这对你有用吗?

foreach (HtmlElement elm in webBrowser1.Document.GetElementsByTagName("iframe"))
{
     string src = elm.GetAttribute("src");
     if (src != null && src != "")
     {
          string content = new System.Net.WebClient().DownloadString(src); //or using HttpWebRequest
          MessageBox.Show(content);
     }
}

关于c# - 在 WebBrowser 的另一个域的 iFrame 中获取文本的任何解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505515/

相关文章:

c# - 比较 mySQL 中的数据值(WPF - C#)

c# - 如何在 C# 中初始化结构

c# - 如何删除事件处理程序并将其重新附加到 C# 中的控件?

javascript - TEmbeddedWB/TWebbrowser : window. external 是一个空对象但是可以调用函数,为什么一开始是 'empty'?

c# - 使用 BlockingCollection.GetConsumableEnumerable 的 Parallel.ForEach 循环

c# - Aspnet Core Decimal 绑定(bind)不适用于非英语文化

c# - 是否可以在 datagridview 中切换行和列?

c# - 如何正确退出 C# 应用程序?

c# - WebBrowser 组件不显示 CSS 3

c# - 我想在 Mono Windows 窗体中使用 WebBrowser 控件