Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
C# Webbrowser控件未显示Html,但显示网页_C#_Visual Studio 2010_Webbrowser Control_Html Frames - Fatal编程技术网

C# Webbrowser控件未显示Html,但显示网页

C# Webbrowser控件未显示Html,但显示网页,c#,visual-studio-2010,webbrowser-control,html-frames,C#,Visual Studio 2010,Webbrowser Control,Html Frames,我正在使用webbrowser控件自动化一项任务,该站点使用框架显示页面。 我的问题是我到了一个地步,我可以看到网页正确加载到webbrowser控件上,但当它进入代码中,我看到html时,我什么也看不到 我在这里也看到了其他示例,但所有这些示例都不会返回所有浏览器html 我通过使用这个得到的是: HtmlWindow frame = webBrowser1.Document.Window.Frames[1]; s

我正在使用webbrowser控件自动化一项任务,该站点使用框架显示页面。 我的问题是我到了一个地步,我可以看到网页正确加载到webbrowser控件上,但当它进入代码中,我看到html时,我什么也看不到

我在这里也看到了其他示例,但所有这些示例都不会返回所有浏览器html

我通过使用这个得到的是:

                    HtmlWindow frame = webBrowser1.Document.Window.Frames[1];
                    string str = frame.Document.Body.OuterHtml;
只是:

带有SRCtag等属性的主框架标签,有没有办法处理这个问题?因为我可以看到网页完全加载了,为什么我看不到html?当我在internet explorer上这样做时,我确实看到了加载后的页面源代码,为什么不在这里

附加信息

页面上有两个框架:

我用它来解释上述情况:

HtmlWindow frame=webBrowser1.Document.Window.Frames[0]

        string str = frame.Document.Body.OuterHtml;
对于第一帧,我得到了正确的HTMl,但对于第二帧,我只看到:

<FRAMESET frameSpacing=1 border=1 borderColor=#ffffff frameBorder=0 rows=29,*><FRAME title="Edit Search" marginHeight=0 src="http://web2.westlaw.com/result/dctopnavigation.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 name=TopNav marginWidth=0 scrolling=no><FRAME title="Main Document" marginHeight=0 src="http://web2.westlaw.com/result/dccontent.aspx?rs=WLW12.01&amp;ss=CXT&amp;cnt=DOC&amp;fcl=True&amp;cfid=1&amp;method=TNC&amp;service=Search&amp;fn=_top&amp;sskey=CLID_SSSA49266105122&amp;db=AK-CS&amp;fmqv=s&amp;srch=TRUE&amp;origin=Search&amp;vr=2.0&amp;cxt=RL&amp;rlt=CLID_QRYRLT803076105122&amp;query=%22LAND+USE%22&amp;mt=Westlaw&amp;rlti=1&amp;n=1&amp;rp=%2fsearch%2fdefault.wl&amp;rltdb=CLID_DB72585895122&amp;eq=search&amp;scxt=WL&amp;sv=Split" frameBorder=0 borderColor=#ffffff name=content marginWidth=0><NOFRAMES></NOFRAMES></FRAMESET>
Frame2的html我看不到:

http://web2.westlaw.com/result/result.aspx?RP=/Search/default.wl&action=Search&CFID=1&DB=AK%2DCS&EQ=search&fmqv=s&Method=TNC&origin=Search&Query=%22LAND+USE%22&RLT=CLID%5FQRYRLT302424536122&RLTDB=CLID%5FDB6558157526122&Service=Search&SRCH=TRUE&SSKey=CLID%5FSSSA648523536122&RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST=
第二个框架的属性(我没有得到它的html)如下图所示:


感谢您使用html,您必须这样做:

        WebClient client = new WebClient();
        string html = client.DownloadString(@"http://stackoverflow.com");
这是一个例子,当然,你可以改变地址。
顺便说一下,您需要使用System.Net

这很好…获取包含所有内部元素的BODY元素:

在您的表单代码中的某个地方:

wb.Url = new Uri("http://stackoverflow.com");
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted);
以下是已完成的工作流程图:

void wb1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var yourBodyHtml = wb.Document.Body.OuterHtml;
}
wb是
System.Windows.Forms.WebBrowser

更新:


和文档一样,我认为在检查第二个框架的内容时,没有加载第二个框架…您可以尝试链接中的解决方案。您必须等待加载帧才能看到其内容

最可能的原因是框架索引0与主/父页面具有相同的域名,而框架索引1具有不同的域名。我说得对吗

这就产生了跨帧安全问题,WB控件只会让您无所事事,不会告诉您到底出了什么问题,只会让您的对象、属性和数据为空(当您尝试扩展对象时,监视窗口中会显示“无变量”)

在这种情况下,您只能访问URL和iFrame属性,但iFrame中没有任何内容

当然,有一些方法可以克服跨帧安全性问题,但它们不是内置在WebBrowser控件中的,它们是外部解决方案,具体取决于您使用的WB控件(如.NET版本或.NET之前版本)

让我知道我是否正确识别了您的问题,如果是,您是否希望我告诉您针对WB控件的设置和实例定制的解决方案


更新:我注意到您正在执行一个.getElementByTagName(“HTML”)(0).outerHTML来获取HTML,您所需要做的就是在document对象或.body对象上调用它,这样就可以了。MyDoc.Body.innerHTML应该能够获取所需内容的内容。另外,请注意,这些文档中还有额外的iframe,以防相关。你能给我们一个包含这两个URL的主文档URL吗?这样我们/我就可以复制你在这里做的事情了?另外,不确定为什么要使用DomeElement,但您应该将其强制转换为它想要强制转换到的本机对象,IHTMLDocument2或您在watch窗口中看到的对象,我认为它是IHTMLFrameElement(如果我没记错的话,但一旦看到它,您就会知道我的意思)。如果您试图使用XML对象,这可能是您无法获取HTML内容、更改对象声明和强制转换(如果有)以及尝试的原因(请告诉我们:)。现在我也很好奇:)。

我为上述问题的解决方案付费,它100%有效

我所做的是使用下面的函数,它返回我正在查找的标记的计数,但我找不到:S。。使用此选项调用下面列出的函数:

FillFrame(webBrowser1.Document.Window.Frames);



private void FillFrame(HtmlWindowCollection hwc)
        {


            if (hwc == null) return;
            foreach (HtmlWindow hw in hwc)
            {
                HtmlElement getSpanid = hw.Document.GetElementById("mDisplayCiteList_ctl00_mResultCountLabel");
                if (getSpanid != null)
                {

                    doccount = getSpanid.InnerText.Replace("Documents", "").Replace("Document", "").Trim();

                    break;
                }

                if (hw.Frames.Count > 0) FillFrame(hw.Frames);
            }


        }
希望它能帮助人们


谢谢你

没有,正如我所说,它只接受框架标签,框架的innerhtml是,但是它显示在网页上:S//我忽略了一个事实,即你的框架有问题。看看我的最新答案:)。如果它仍然不起作用,请在问题中发布您的确切代码,因为可能会发生其他错误。您的问题是跨帧安全问题,我已经发布了答案,请阅读,我们会为您找到解决方案:)。@Erx_VB.NExT.Coder任何帮助:)嗨,谢谢您的帮助:),请看上面的问题描述,我已经更新了,,:)我发布了解决方案:),谢谢你的帮助
FillFrame(webBrowser1.Document.Window.Frames);



private void FillFrame(HtmlWindowCollection hwc)
        {


            if (hwc == null) return;
            foreach (HtmlWindow hw in hwc)
            {
                HtmlElement getSpanid = hw.Document.GetElementById("mDisplayCiteList_ctl00_mResultCountLabel");
                if (getSpanid != null)
                {

                    doccount = getSpanid.InnerText.Replace("Documents", "").Replace("Document", "").Trim();

                    break;
                }

                if (hw.Frames.Count > 0) FillFrame(hw.Frames);
            }


        }