【问题标题】:How to read a nested iframe's content in C#?如何在 C# 中读取嵌套 iframe 的内容?
【发布时间】:2014-11-01 13:58:03
【问题描述】:

我想在 C# 中读取包含 iframe 内容的 HTML 页面。我使用了一些技术,但结果总是拒绝访问...

我要阅读的页面包含嵌套框架:

“主页 > iframe > iframe >iframe”

我想阅读所有内容,但我无法单独阅读 iframe 的内容,因为这会重定向到另一个页面。

<html>
<body>
<iframe>
  <html>
    <body>
    <body>
  </html>
</iframe>
<body>
</html>

我尝试使用网络客户端和网络浏览器控制方法,但它们不起作用。

【问题讨论】:

    标签: c# iframe webbrowser-control


    【解决方案1】:

    很简单。如果您使用的是 webBrowser 控件:

    HtmlElement element = webBrowser1.Document.Window.Frames["frame-id"].Document.GetElementById("element-id");

    如果您有多个嵌套的 IFrame,您可以链接查询:

    HtmlElement element = webBrowser1.Document.Window.Frames["frame-id"].Frames["second-frame-id"].Document.GetElementById("element-id");

    我添加了Document.GetElementById("element-id");,以防您尝试访问 IFrame 中的元素。如果没有,您可以忽略它们。

    确保查看已加载的整个文档的源代码。您可能需要将多个嵌套的 IFrame 链接在一起才能获得所需的内容。

    另外,在尝试访问 IFrame 之前,请确保它已完全加载,否则您将一事无成。有关等待动态页面加载的更多信息,请参阅这篇文章:how to dynamically generate HTML code using .NET's WebBrowser or mshtml.HTMLDocument?

    【讨论】:

      【解决方案2】:

      所以你没有放任何代码,几乎没有任何关于你的代码的信息。但是,如果您使用的是 .NET Framework C# 桌面应用程序,则很可能您有无效的 html 代码或 Microsoft 的高级代码。使用工具集 Web 浏览器是 Internet Explorer 的降级版本,大部分情况下不会读取 HTML5。它将读取 iframe 以及对象。您必须从所有网站的公共 http 中读取。

      //更新的答案:

      创建 PHP 文件并托管它。使用此文件读取站点。

      <?php
      $homepage = file_get_contents('http://www.foobar.com/');
      echo $homepage;
      ?>
      

      如果 PHP 无法完成该工作,则另一种选择: https://code.google.com/p/php-proxy/

      【讨论】:

      • HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); myRequest.Method = "GET"; WebResponse myResponse = myRequest.GetResponse(); StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);字符串结果 = sr.ReadToEnd(); sr.关闭(); myResponse.Close();
      • 好吧.. 我认为您可能需要找到使用您的代码获取愚蠢 iframe 的后门。制作一个 PHP 脚本来读取网站并回显它。然后为您的 HTTP 请求使用该 php 脚本。
      • 我对文件有多个 PHP 查询,并且 http 请求在第一次打印之前一直有效,因此从 PHP 文件中读取整个站点并将其用作 url。
      • 试试我更新后的答案...如果没有,我将发送一个指向我的代理脚本的链接,该脚本绝对有效。
      • 这不起作用 iframe 重定向到另一个页面.. php 脚本:mandygenius.com/myfile.php ..... 实际链接:g2g.fm/forum/…
      【解决方案3】:

      使用 WebBrowser 组件,您可以使用以下方法解析 HtmlDocument:

       foreach (HtmlElement e in WebBrowser.Children.All)
          <your code here>;
      

      使用 IFrame,元素位于 Document 中,因此您可以:

      HtmlElement iframe_element = <your IFrame element>
      foreach (HtmlElement e in iFrame_element.Document.Children)
         <your code goes here>;
      

      您想要做的是将您的参考保存在您的网页上,这样您就不必每次都解析您的网页来找到您的 IFrame。这种递归性质相当缓慢,这将为您节省一些心痛。一个你有你的 IFrame 然后你可以编写普通代码来找到你需要的 HtmlElements。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-10
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多