C# Webbrowser控件未显示Html,但显示网页
我正在使用webbrowser控件自动化一项任务,该站点使用框架显示页面。 我的问题是我到了一个地步,我可以看到网页正确加载到webbrowser控件上,但当它进入代码中,我看到html时,我什么也看不到 我在这里也看到了其他示例,但所有这些示例都不会返回所有浏览器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
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&ss=CXT&cnt=DOC&fcl=True&cfid=1&method=TNC&service=Search&fn=_top&sskey=CLID_SSSA49266105122&db=AK-CS&fmqv=s&srch=TRUE&origin=Search&vr=2.0&cxt=RL&rlt=CLID_QRYRLT803076105122&query=%22LAND+USE%22&mt=Westlaw&rlti=1&n=1&rp=%2fsearch%2fdefault.wl&rltdb=CLID_DB72585895122&eq=search&scxt=WL&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&ss=CXT&cnt=DOC&fcl=True&cfid=1&method=TNC&service=Search&fn=_top&sskey=CLID_SSSA49266105122&db=AK-CS&fmqv=s&srch=TRUE&origin=Search&vr=2.0&cxt=RL&rlt=CLID_QRYRLT803076105122&query=%22LAND+USE%22&mt=Westlaw&rlti=1&n=1&rp=%2fsearch%2fdefault.wl&rltdb=CLID_DB72585895122&eq=search&scxt=WL&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);
}
}