从WebBrowser控件获取帧源

时间:2012-08-21 04:08:51

标签: c# vb.net browser save frame

当我的WebBrowser控件导航时,我编写了一个保存站点源的函数。我不能只保存WebBrowser.DocumentText,因为这会遗漏所有的帧内容。

我现在遇到的问题是访问框架内容 - 我无法找到包含它的方法/属性。

以下使用简单的WebBrowser控件,只需将saveWebsite(FilePath, WebBrowser1)放入DocumentCompleted事件中。

我已经在VB.NET中完成了这个,但我熟悉C#,所以C#解决方案也很好

    Public Sub saveWebsite(ByVal sDirectory As String, ByVal oBrowser As WebBrowser)

    File.WriteAllText(sDirectory & "index.htm", oBrowser.DocumentText)

    'Now write a file for each frame - putting each file in its relative path'
    For Each oFrame As HtmlWindow In oBrowser.Document.Window.Frames
        oFI = New FileInfo(sDirectory & oBrowser.Url.MakeRelativeUri(oFrame.Url).ToString)
        oFI.Directory.Create()

        'ISSUE: This is the issue, unlike with oBrowser, there is no DocumentText property for oFrame.'
        'ISSUE: Ive tried several things like Body.InnerText/Html, Body.OuterText/HTML, etc.'
        File.WriteAllText(oFI.ToString, oFrame.WindowFrameElement.InnerText )
    Next oFrame
End Sub

2 个答案:

答案 0 :(得分:0)

经过更多的实验,我才找到了解决方案。然而它很脏,我不喜欢它。

将上一个/问题行从oFrame.WindowFrameElement.InnerText切换为oFrame.Document.All.Item(0).OuterHtml似乎有时可以解决问题。这对嵌套框架没有任何意义,但我并不担心这一点。

Anywho,如果有人对上述方法有更清洁的解决方案,请告诉我。 (甚至是一种更有效/更有效的“全部保存”方式)。

编辑:以下似乎工作得更好,但仍然不是很好。 (我有一个以<%VBSCRIPT%>开头的网页,以及所有已保存的网页)oFrame.Document.GetElementsByTagName("html").Item(0).OuterHtml

答案 1 :(得分:0)

我也面临着类似的问题,我想在页面的框架中访问所有文本。下面的代码对我有用

Dim frame = WebBrowser1.Document.Window.Frames(0) //Replace 0 with frame id if needed
Dim innderdiv= frame.Document.GetElementById("divContentLower")
Dim contents = innderdiv.InnerText
MsgBox(contents )

这里divContentLover是该帧内直接子div的ID。所以代码返回了内容