如何在C#中阅读嵌套的iframe内容?

时间:2014-11-01 13:58:03

标签: c# iframe webbrowser-control

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

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

"主页> iframe> iframe> iframe"

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

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

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

3 个答案:

答案 0 :(得分:0)

所以你没有代码,几乎没有代码的任何信息。但是,如果您使用的是.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/

答案 1 :(得分:0)

使用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,那么您可以编写正常代码来查找所需的Html元素。

希望有所帮助。

答案 2 :(得分:0)

非常简单。如果您使用的是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之前,请确保IFrame已满载,否则您将无法运气。有关等待加载动态网页的详细信息,请参阅此文章:how to dynamically generate HTML code using .NET's WebBrowser or mshtml.HTMLDocument?