2011-03-02 111 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的家伙,根据需要进行转换;)