2011-03-02 41 views
9

我試圖讓HTML源代碼以下列方式HTML源代碼:獲得通過C#中的WebBrowser控件

webBrowser1.Document.Body.OuterHtml; 

,但它不工作。例如,如果原來的HTML源代碼是:

<html> 
<body> 
    <div> 
     <ul> 
      <li> 
       <h3> 
        Manufacturer</h3> 
      </li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_3808675_100021_10194772_">Sony </a>(44)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_108496_100021_10194772_">Nikon </a>(19)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_3808726_100021_10194772_">Panasonic </a>(37)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_3808769_100021_10194772_">Canon </a>(29)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_2913388_100021_10194772_">Olympus </a>(21)</li> 
      <li class="seeAll"><a href="/4566-6501_7-0.html? 

sa=1000036&filter=100021_10194772_" class="readMore">See all manufacturers </a></li> 
     </ul> 
    </div> 
</body> 
</html> 

webBrowser1.Document.Body.OuterHtml輸出是:

<body> 
    <div> 
     <ul> 
      <li> 
       <h3> 
        Manufacturer</h3> 
       <li><a href="/4566-6501_7-0.html?filter=1000036_3808675_100021_10194772_">Sony </a>(44) 
        <li><a href="/4566-6501_7-0.html?filter=1000036_108496_100021_10194772_">Nikon </a>(19) 
         <li><a href="/4566-6501_7-0.html?filter=1000036_3808726_100021_10194772_">Panasonic 
         </a>(37) 
          <li><a href="/4566-6501_7-0.html?filter=1000036_3808769_100021_10194772_">Canon </a> 
           (29) 
           <li><a href="/4566-6501_7-0.html?filter=1000036_2913388_100021_10194772_">Olympus </a> 
            (21) 
            <li class="seeAll"><a class="readMore" href="/4566-6501_7-0.html?sa=1000036&amp;filter=100021_10194772_"> 
             See all manufacturers </a></li> 
     </ul> 
    </div> 
</body> 

,你可以看到,許多</li>都將丟失。

有沒有辦法讓WebBrower正確控制HTML源碼?請注意,在我的應用程序中,我嘗試使用WebBrowser向每個節點添加座標信息並輸出其HTML源,並添加了作爲節點屬性添加的座標信息。

有人可以幫我一個忙嗎?

回答

8

嘗試使用DocumentTextDocumentStream屬性。

+0

是的,DocumentText和DocumentStream都可以返回正確的HTML源代碼。但是當我在DOM樹(myIHTMLElement.setAttribute())中爲節點添加一些屬性時,WebBrowser1.DocumentText獲得的HTML源不包含任何附加屬性 – Rockycqu 2011-03-02 09:38:49

+0

@Rockucqu,InnerHtml屬性如何返回正確的html? – VinayC 2011-03-02 10:15:41

1

你試過WebBrowser1.DocumentText

+0

是的,WebBrowser1.DocumentText返回正確的HTML源代碼。但是,當我在DOM樹(myIHTMLElement.setAttribute())中爲節點添加一些屬性時,WebBrowser1.DocumentText獲得的HTML源代碼在我的應用程序中不包含任何附加屬性 – Rockycqu 2011-03-02 09:38:04

-2

看看這個。 你可以使用從System.Net Webclient.DownloadStringWebBrowser on MSDN

替代(它也有WebClient.DownloadStringAsync ...)下面是說明:WebClient on MSDN

+1

,我需要使用WebBrowser將座標信息添加到每個節點並輸出其帶有作爲節點屬性添加的座標信息的HTML源。 Webclient無法執行此任務 – Rockycqu 2011-03-02 09:40:15

3

謝謝大家。我的最終解決方案是:首先,使用body.outlineHtml來獲取html源代碼。因爲body.outlineHtml可能會錯過<li><td>的結束標記,所以第二步是使用整潔來修復HTML源代碼。在這些之後,我們可以無誤地獲得HTML源代碼

+1

好,然後繼續並標記爲答案 – V4Vendetta 2011-04-07 08:35:09

0

如果要抓取WebBrowser控件的整個HTML源代碼,請使用此-WebBrowser1.Document.GetElementsByTagName(「HTML」)。Item(0).OuterHtml。這當然假定你已經格式化了HTML並且存在HTML標籤。如果你想把它縮小到只是身體,那麼顯然將HTML標籤改爲BODY標籤。通過這種方式,您可以在設置「DocumentText」之後獲取所有更改。對不起,我是一個VB的傢伙,根據需要進行轉換;)