0

当我的 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
4

2 回答 2

0

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

有时将 last/issue 行从oFrame.WindowFrameElement.InnerTextto切换oFrame.Document.All.Item(0).OuterHtml似乎可以解决问题。这不会对嵌套框架做任何事情,但我并不担心。

任何人,如果有人对上述问题有更清洁的解决方案,请告诉我。(或者甚至是“拯救所有人”的更有效/高效的方式)。

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

于 2012-08-22T13:55:17.243 回答
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。所以代码返回它的内容

于 2020-10-16T05:15:33.027 回答