【问题标题】:CefSharp and frames, only retrieving HTML from first frameCefSharp 和框架,仅从第一帧检索 HTML
【发布时间】:2016-07-06 10:32:12
【问题描述】:

pcpao.org/general.php?strap=152814186280001650

在尝试从该站点获取完整的 HTML 时,.GetSourceAsync 和 .ViewSource 都只显示“框架集”HTML。使用 ShowDevTools 选项,完整的 HTML 数据位于元素集合和 Chrome-devtools 的源中。

我在网页加载后运行它,但它应该仍然存在,因为它在开发工具中?

从导航站点中获取完整的 HTML 缺少什么。我怀疑这与框架有关,但经过一个小时的谷歌搜索和阅读旧消息后,我看到这只是切线提及。

Winform

  package id="cef.redist.x64" version="3.2526.1362" targetFramework="net46"
  package id="cef.redist.x86" version="3.2526.1362" targetFramework="net46"
  package id="CefSharp.Common" version="47.0.3" targetFramework="net46"
  package id="CefSharp.WinForms" version="47.0.3" targetFramework="net46"

【问题讨论】:

  • “完整的 HTML 源代码”没有术语,开发工具只是为您简化了一些事情,但它们并没有以这种方式工作。每个框架都包含 html 文档。所以你应该从每一帧中获取来源。请参阅 CefSharp API 了解如何操作。

标签: html frames cefsharp


【解决方案1】:

我在尝试点击位于框架而不是主框架上的项目时遇到了同样的问题。使用您回答中的示例,我编写了以下扩展方法:

public static IFrame GetFrame(this ChromiumWebBrowser browser, string FrameName)
{
    IFrame frame = null;

    var identifiers = browser.GetBrowser().GetFrameIdentifiers();

    foreach (var i in identifiers)
    {
        frame = browser.GetBrowser().GetFrame(i);
        if (frame.Name == FrameName)
            return frame;
    }

    return null;
}

如果您的表单上有包含此方法的模块的“使用”,您可以执行以下操作:

var frame = browser.GetFrame("nameofframe");
if (frame != null)
    frame.EvaluateScriptAsync("document.getElementById('whateveridyouwanttoclick').click();");

当然在使用这个之前你需要确保页面加载完成,但是我打算经常使用它。希望对您有所帮助!

【讨论】:

    【解决方案2】:

    谢谢,以前版本的一些例子让我很困惑这是如何工作的。我一直在寻找这样的东西。

    var frameIdent = Browser.GetBrowser().GetFrameIdentifiers();
    var result = Browser.GetBrowser().GetFrame(frameIdent.Last()).GetSourceAsync().Result;
    textBox1.Text = result.ToString();
    

    所以我猜想从站点获取所有 HTML 的方法是遍历帧标识符列表,通过 GetSourceAsync 从每个帧获取结果并将它们全部连接到一个字符串。

    【讨论】:

    • 根据我发布的链接,您是否等待页面完成加载并获取主框架的源代码?
    猜你喜欢
    • 2012-01-20
    • 2016-04-29
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多