Web浏览器控件未显示Html,但显示网页

问题描述:

我使用webbrowser控件自动执行任务,站点使用框架显示页面。 我的问题是我到了一个地步,在那里我可以看到webbrowser控件上正确加载的网页,但是当它进入代码,我看到html我什么都看不到。Web浏览器控件未显示Html,但显示网页

我在这里也看到了其他的例子,但所有这些都没有返回所有的浏览器html。

我得到通过使用该什么:

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

就是:

的与SRC标签等类似属性主框架的标签,有没有什么办法如何处理这种情况的原因,因为我可以看到完全加载的网页为什么我看不到html?因为当我在Internet Explorer上这样做时,我确实看到加载的页面源代码为什么不在这里?

附加信息

有在页面上两个帧:

我使用它来如上:

HtmlWindow帧= 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> 

UPDATE

帧的两个网址是为如下:

Frame1其html我看到

http://web2.westlaw.com/nav/NavBar.aspx?RS=WLW12.01&VR=2.0&SV=Split&FN=_top&MT=Westlaw&MST= 

式2其HTML我不明白:

enter image description here

感谢:

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我不明白是在下面的图片的属性你

+0

你的问题是一个跨框架的安全问题,我已经发布了一个答案,不妨一读,我们会为您找到一个解决方案:)。 – 2012-02-12 12:15:30

+0

@ Erx_VB.NExT.Coder任何帮助:) – confusedMind 2012-02-12 13:29:32

我付了上述问题的解决方案,它的工作原理是100%。

我所做的是使用下面这个函数,它返回我数到我所寻找的标签,我找不到:秒。使用这个调用的函数如下:

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); 
      } 


     } 

希望它有助于人们。

谢谢

为了采取HTML你必须这样做:

 WebClient client = new WebClient(); 
     string html = client.DownloadString(@"http://*.com"); 

这是一个当然的例子,您可以更改地址。顺便说一句,你需要使用System.Net;

+0

嗨,我不认为它解决了任何只是测试太..:X – confusedMind 2012-02-11 14:11:59

这工作得很好...得到BODY元素与所有内部元素:

某处在你的表单代码:

wb.Url = new Uri("http://*.com"); 
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbDocumentCompleted); 

这里是wbDocumentCompleted:

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

WB是System.Windows.Forms.WebBrowser

UPDATE:

和文件一样,我认为你r第二帧在您检查其内容时未加载...您可以尝试从this链接中获得解决方案。您将不得不等待您的帧被加载才能看到它的内容。

+0

不,因为我说它只需要帧标签,并且帧的innerhtml是,但是它显示在网页上:S // – confusedMind 2012-02-12 10:41:10

+0

我错过了你有框架问题的事实。看看我更新的答案:)。如果它仍然不起作用,你能否在你的问题中发布你的确切代码,因为可能发生了你做错的其他事情。 – 2012-02-12 15:34:30

最可能的原因是帧索引0与主/父页面具有相同的域名,而帧索引1具有不同的域名。我对么?

这会产生一个跨框架安全问题,而WB控制只会让你变得很干燥,并且不会告诉你地球出了什么问题,而只是让你的对象,属性和数据为空(将会显示“No当您尝试展开对象时,在监视窗口中显示“变量”)。

在这种情况下你可以访问的唯一东西就是URL和iFrame属性,但没有任何iFrame。

当然,有一些方法可以解决跨框架安全问题 - 但它们并未嵌入到WebBrowser控件中,它们是外部解决方案,具体取决于您使用的是哪个WB控件(如.NET版本或预.NET版本)。

如果我已正确识别您的问题,请告知我,如果是这样,如果您希望我告诉您有关适合您的WB控制实例的解决方案。

更新:我注意到,你在做一个.getElementByTagName(“HTML”)(0).outerHTML拿到HTML,所有你需要做的就是把这个文档对象,或上。身体对象,应该这样做。 MyDoc.Body.innerHTML应该得到你想要的内容。此外,请注意,这些文档中还有其他iFrames,以防相关。你能否给我们提供这两个网址的主文档URL,以便我们/我可以复制你在这里做的事情?此外,不知道为什么你使用DomElement,但你应该把它转换为它想要投射到的本地对象,无论是IHTMLDocument2还是观察窗口中看到的对象,我认为这是IHTMLFrameElement(如果我记得正确,但是一旦你看到它,你就会明白我的意思)。如果您尝试使用XML对象,这可能是您无法获取HTML内容,更改对象声明并转换为对象声明(如果有)的原因,并且让我们知道:)。现在我很好奇:)。

+0

嗨,谢谢你的帮助:),请看上面的问题描述我已经更新了,, :) – confusedMind 2012-02-12 12:57:42

+0

我贴了解决方案:),谢谢你的帮忙 – confusedMind 2012-02-13 19:30:16