2013-03-06 13 views
8

Qualcuno potrebbe suggerire un browser headless per .NET che supporti i cookie e l'esecuzione automatica di JavaScript?C# browser headless con supporto javascript per crawler

+0

Si intende il [controllo WebBrowser] (http://msdn.microsoft.com/en-us/library/2te2y1x6.aspx)? –

+0

possibile duplicato di [WebClient esegue javascript] (http://stackoverflow.com/questions/5372277/webclient-runs-javascript) –

+0

Come pensi di usarlo? – jrummell

risposta

4

Non sono a conoscenza di un browser headless basato su .NET ma c'è sempre PhantomJS che è C/C++ e funziona abbastanza bene per l'assistenza ai test di unità di JS con QUnit.

C'è anche un'altra questione rilevante qui che potrebbe aiutare voi - Headless browser for C# (.NET)?

9

Selenium+HtmlUnitDriver/GhostDriver è esattamente quello che stai cercando. Semplificato, Selenium è una libreria per l'utilizzo di vari browser per scopi di automazione: testing, scraping, task automation.

Esistono diverse classi WebDriver con le quali è possibile utilizzare un browser effettivo. HtmlUnitDriver è senza testa. GhostDriver è un WebDriver per PhantomJS, quindi puoi scrivere C# mentre in realtà PhantomJS eseguirà il sollevamento pesi.

Snippet di codice da Selenium docs per Firefox, ma il codice con GhostDriver (PhantomJS) o HtmlUnitDriver è quasi identico.

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(); 
    } 
} 

Se si esegue questo su macchina Windows è possibile utilizzare il driver attuale Firefox/Chrome, perché si aprirà una finestra del browser vero e proprio che opererà come programmato in C#. HtmlUnitDriver è il più leggero e veloce.

Ho eseguito con successo Selenium per C# (FirefoxDriver) su Linux utilizzando Mono. Suppongo che HtmlUnitDriver funzioni altrettanto bene degli altri, quindi se hai bisogno di velocità - ti suggerisco di andare su Mono (puoi sviluppare, testare e compilare con Visual Studio su Windows, nessun problema) + Selenium HtmlUnitDriver in esecuzione su host Linux senza desktop .

Problemi correlati