2013-03-06 4 views
8

Könnte jemand kopflosen Browser für .NET vorschlagen, der Cookies und authomatisch Javascript-Ausführung unterstützt?C# kopfloser Browser mit JavaScript-Unterstützung für Crawler

+0

Sie meinen das [WebBrowser-Steuerelement] (http://msdn.microsoft.com/en-us/library/te2y1x6.aspx)? –

+0

möglich Duplikat von [WebClient runs javascript] (http://stackoverflow.com/questions/5372277/webclient-runs-javascript) –

+0

Wie planen Sie es zu verwenden? – jrummell

Antwort

4

Mir ist kein .NET-basierter Browser ohne Kopf bekannt, aber es gibt immer PhantomJS, was C/C++ ist, und es funktioniert ziemlich gut für die Unterstützung bei Unit-Tests von JS mit QUnit.

Es gibt auch eine andere wichtige Frage hier, die Ihnen helfen könnten - Headless browser for C# (.NET)?

9

Selenium+HtmlUnitDriver/GhostDriver ist genau das, was Sie suchen. Selenium ist eine vereinfachte Bibliothek für die Verwendung verschiedener Browser für Automatisierungszwecke - Testen, Scraping, Aufgabenautomatisierung.

Es gibt verschiedene WebDriver-Klassen, mit denen Sie einen aktuellen Browser betreiben können. HtmlUnitDriver ist ein kopfloser. GhostDriver ist ein WebDriver für PhantomJS, so dass Sie C# schreiben können, während PhantomJS das Heavy Lifting übernimmt.

Code-Snippet von Selenium docs für Firefox, aber Code mit GhostDriver (PhantomJS) oder HtmlUnitDriver ist fast identisch.

using OpenQA.Selenium; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.Support.UI; 

class GoogleSuggest 
{ 
    static void Main(string[] args) 
    { 
     // driver initialization varies across different drivers 
     // but they all support parameter-less constructors 
     IWebDriver driver = new FirefoxDriver(); 
     driver.Navigate().GoToUrl("http://www.google.com/"); 


     IWebElement query = driver.FindElement(By.Name("q")); 
     query.SendKeys("Cheese"); 
     query.Submit(); 

     WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
     wait.Until((d) => { return d.Title.ToLower().StartsWith("cheese"); }); 

     System.Console.WriteLine("Page title is: " + driver.Title); 

     driver.Quit(); 
    } 
} 

Wenn Sie diese auf Windows-Rechner ausführen können Sie aktuelle Firefox/Chrome-Treiber verwenden, da es ein tatsächlichen Browser-Fenster geöffnet wird, die in C# wie programmiert arbeiten wird. HtmlUnitDriver ist das leichteste und schnellste.

Ich habe erfolgreich Selenium für C# (FirefoxDriver) unter Linux mit Mono ausgeführt. Ich nehme an, HtmlUnitDriver funktioniert auch so gut wie die anderen, also wenn Sie Geschwindigkeit benötigen - ich schlage vor, Sie gehen für Mono (Sie können entwickeln, testen und mit Visual Studio unter Windows kompilieren, kein Problem) + Selenium HtmlUnitDriver läuft auf Linux-Host ohne Desktop .