CefSharp和框架,仅从第一帧

时间:2016-03-19 18:03:52

标签: html frames cefsharp

pcpao.org/general.php?strap=152814186280001650

在尝试从该站点获取完整的HTML时,.GetSourceAsync和.ViewSource都只显示'frameset'HTML。使用ShowDevTools选项,完整的HTML数据包含在元素集合和Chrome-devtools的源代码中。

我在网页加载后运行这个,但它应该都在那里,因为它在开发工具中?

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

Winforms

  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"

2 个答案:

答案 0 :(得分:6)

我有同样的问题试图点击并且项目位于框架而不是主框架上。使用你的答案中的例子,我写了以下扩展方法:

        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();");

当然,在使用之前你需要确保页面加载完成,但我打算大量使用它。希望它有所帮助!

吉姆

答案 1 :(得分:2)

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

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

所以我想从网站获取所有HTML的方法是循环遍历框架标识符列表,通过GetSourceAsync从每个框架获取结果并将它们连接成一个字符串。