2016-03-23 16 views

cevap

2

Sayfayı almak ve görüntülemek için WebBrowser denetimini kullanabilirsiniz. Ne yazık ki, kontrol Internet Explorer kullanıyor ve en son sürümü kullanmaya zorlamak için change a registry value'a ihtiyacınız var ve uygulama çok kırılgan.

Başka bir seçenek, WebKit gibi bağımsız bir tarayıcı motoru almak ve .NET'de çalışmasını sağlamaktır.

class Program 
    { 
     static void Main(string[] args) 
     { 
      GetRenderedWebPage("http://siderite.blogspot.com", TimeSpan.FromSeconds(5), output => 
      { 
       Console.Write(output); 
       File.WriteAllText("output.txt", output); 
      }); 
      Console.ReadKey(); 
     } 

     private static void GetRenderedWebPage(string url, TimeSpan waitAfterPageLoad, Action<string> callBack) 
     { 
      const string cEndLine= "All output received"; 

      var sb = new StringBuilder(); 
      var p = new PhantomJS(); 
      p.OutputReceived += (sender, e) => 
      { 
       if (e.Data==cEndLine) 
       { 
        callBack(sb.ToString()); 
       } else 
       { 
        sb.AppendLine(e.Data); 
       } 
      }; 
      p.RunScript(@" 
var page = require('webpage').create(); 
page.viewportSize = { width: 1920, height: 1080 }; 
page.onLoadFinished = function(status) { 
    if (status=='success') { 
     setTimeout(function() { 
      console.log(page.content); 
      console.log('" + cEndLine + @"'); 
      phantom.exit(); 
     }," + waitAfterPageLoad.TotalMilliseconds + @"); 
    } 
}; 
var url = '" + url + @"'; 
page.open(url);", new string[0]); 
     } 
    } 

Bu kullanır: Ben ile geldi http://webkitdotnet.sourceforge.net/basics.php

ben içeriği almak için biraz demo uygulaması üzerinde çalıştı ve bu: Ben bunu nasıl açıklayan bir sayfa buldum, ama oldukça tarihli PhantomJS "başsız" tarayıcı, "referans NuGet paketi" içinden doğrudan Visual Studio'dan alabileceğiniz sarıcı NReco.PhantomJS aracılığıyla. Eminim daha iyi yapılabilir, ama bugün yaptığım buydu. PhantomJS geri aramalarına bir göz atmak isteyebilirsiniz, böylece neler olup bittiğini doğru bir şekilde ayıklayabilirsiniz. Örneğim, URL çalışmazsa, örneğin sonsuza dek bekleyecektir. İşte kullanışlı bir link: https://newspaint.wordpress.com/2013/04/25/getting-to-the-bottom-of-why-a-phantomjs-page-load-fails/

+0

Bir tarayıcı motoru iyi bir fikir gibi görünüyor, varsayılan IE8? C# tarayıcı benim projem için en iyi seçim değildir. WebKit motorunu denemeden önce, web sitesindeki her grafiği engelleyebiliyor muyum? Web sitesini olabildiğince hızlı yüklemem gerekiyor. – Phil795

+0

Engelleme hakkında, onResourceRequested PhantomJS olayına bir bakın. Belki bir çeşit iptal mekanizması vardır. Ancak, sayfanın farklı şekilde oluşturulabileceği resimlerin boyutuna göre bunu göz önünde bulundurun. –

+0

Kod örneği için teşekkürler, çok yardımcı oldu. – Phil795

2

Örneğinizde bu mümkün değil. İçeriği bir dize olarak yükleyeceğinden. Bu dizeyi "tarayıcı motoru" nda oluşturmalı veya sizin için yapacak herhangi bir bileşeni bulmalısınız.

abotx'u incelemenizi öneririm, sadece bu özelliği duyururlar; bu nedenle sizin için ilginç olabilir, ancak bu sizin için ücretsiz değildir.

İlgili konular