2012-02-11 104 views
0

我使用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

回答

0

我付了上述問題的解決方案,它的工作原理是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); 
      } 


     } 

希望它有助於人們。

謝謝

0

爲了採取HTML你必須這樣做:

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

這是一個當然的例子,您可以更改地址。順便說一句,你需要使用System.Net;

+0

嗨,我不認爲它解決了任何只是測試太..:X – confusedMind 2012-02-11 14:11:59

0

這工作得很好...得到BODY元素與所有內部元素:

某處在你的表單代碼:

wb.Url = new Uri("http://stackoverflow.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

最可能的原因是幀索引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