Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输入和帧,仅从第一帧检索HTML_Html_Frames_Cefsharp - Fatal编程技术网

输入和帧,仅从第一帧检索HTML

输入和帧,仅从第一帧检索HTML,html,frames,cefsharp,Html,Frames,Cefsharp,pcpao.org/general.php?strap=152814186280001650 在尝试从该站点获取完整HTML时,.GetSourceAsync和.ViewSource都只显示“框架集”HTML。使用ShowDevTools选项,完整的HTML数据位于elements集合和Chrome devtools的源中 我在网页加载后运行这个,但它应该仍然存在,因为它在开发工具中 要从导航站点获取完整的HTML,我缺少什么。我怀疑这与相框有关,但在谷歌搜索和阅读了一个小时的旧消息后,我发现这

pcpao.org/general.php?strap=152814186280001650

在尝试从该站点获取完整HTML时,.GetSourceAsync和.ViewSource都只显示“框架集”HTML。使用ShowDevTools选项,完整的HTML数据位于elements集合和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"

谢谢,以前版本中的一些例子让我搞不清楚它是如何工作的。我在找这样的东西

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

因此,我想从站点获取所有HTML的方法是通过框架标识符列表循环,通过GetSourceAsync从每个框架获取结果,并将它们全部连接到一个字符串。

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

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

当然,在使用这个之前,您需要确保页面加载完成,但我计划经常使用它。希望有帮助

“完整HTML源代码”并没有术语,devtools只是为您简化了一些事情,但它们并没有以这种方式工作。每个框架包含html文档。因此,您应该从每个帧获取源。咨询CefSharp API以了解如何操作。根据我发布的链接,看起来像的副本,您是否等待页面完成加载并获取主框架的源代码?