2012-06-04 5 views
7

Vorrei caricare un DOM utilizzando un documento (in forma di stringa) o un URL, quindi Esegui le funzioni javascript (inclusi i selettori jQuery) contro di esso. Questo sarebbe totalmente lato server, in corso, nessun client/browser.Carica un DOM ed esegui javascript, lato server, con .Net

Fondamentalmente ho bisogno di caricare il dom e quindi utilizzare selettori jQuery e text() & tipo val() funzioni per estrarre le stringhe da esso. Non ho davvero bisogno di manipolare il dom.

Ho guardato. Motori JavaScript javascript come Jurassic e Jint, ma nessuno dei due supporta il caricamento di un DOM, e quindi non può fare ciò di cui ho bisogno.

Sarei disposto a considerare soluzioni non .Net (node.js, ruby, ecc.) Se esistono, ma in realtà preferirebbero .Net.

modificare Il sotto è una buona risposta, ma al momento sto cercando una strada diversa, sto cercando di envjs porta al giurassico. Se riesco a farlo funzionare, penso che farà ciò che voglio, resta sintonizzato ...

+0

Come sta arrivando? Mi piacerebbe trarre beneficio da questo progetto, o contribuire a questo, dal momento che ho fatto il mio tentativo, ma per il momento sono stato bloccato. Se vuoi, aggiungi @gmail.con il mio nome SO e puoi contattarmi lì. Ho un progetto JavaScript che aggiunge ActiveX a Jurassic qui: jurascript.codeplex.com – aikeru

risposta

12

La risposta dipende da cosa stai cercando di fare. Se il tuo obiettivo è fondamentalmente una simulazione completa del browser web, o un "browser senza testa", ci sono un certo numero di soluzioni, ma nessuna di esse (che io sappia) esiste in modo pulito in .NET. Per simulare un browser, è necessario un motore javascript e un DOM. Hai identificato alcuni motori; Ho trovato Jurassic sia il più robusto che il più veloce. Anche il motore V8 Chrome di Google è molto popolare; il progetto Neosis Javascript.NET fornisce un wrapper .NET per questo. Non è puramente .NET dal momento che si ha una dipendenza non-. NET, ma si integra in modo pulito e non è molto difficile da usare.

Ma come hai notato, hai ancora bisogno di un DOM. In puro C# c'è XBrowser, ma sembra un po 'stantio. Ci sono anche le rappresentazioni basate su javascript dell'intero DOM del browser come jsdom. Probabilmente potresti eseguire jsdom in Jurassic, offrendoti una simulazione DOM senza browser, tutto in C# (anche se molto probabilmente molto lentamente!) Sarebbe sicuramente perfetto per il V8. Se esci dal regno di .NET, ci sono altre soluzioni meglio supportate. This question discute HtmlUnit. Poi c'è lo Selenium per l'automazione dei browser web attuali.

Inoltre, tenere presente che gran parte del lavoro svolto attorno a questi strumenti è destinato ai test. Sebbene ciò non significhi che non potresti usarli per qualcos'altro, essi potrebbero non funzionare o integrarsi bene per qualsiasi tipo di uso stabile nel codice di produzione inline. Se si sta tentando di fare fondamentalmente una manipolazione HTML in tempo reale, allora una soluzione che mescola molte tecnologie che non sono ampiamente utilizzate ad eccezione dei test potrebbe essere una scelta sbagliata.

Se il tuo bisogno è in realtà una manipolazione dell'HTML, e non ha proprio bisogno di usare Javascript, ma stai pensando di più sulla ricchezza di questi strumenti disponibili in JS, allora guarderei gli strumenti C# progettati per questo scopo. Ad esempio HTML Agility Pack o il mio progetto CsQuery, che è una porta jQuery C#.

Se si sta tentando di prendere un codice che è stato scritto per il client, ma eseguirlo su un server - ad es. per raschiare il web sofisticato/accelerato - cerco in giro usando questi termini. Ad esempio, this question discute questo, con le risposte che includono PhantomJS, uno stack di browser webkit headless, nonché alcuni degli strumenti di test che ho già menzionato. Per il web scraping, immagino che tu possa vivere senza che tutto sia in .NET, e questa potrebbe essere l'unica risposta ragionevole in ogni caso.

+0

CsQuery può fungere da DOM per jurassic (con un piccolo layer wrapper)? – mcintyre321

+0

L'implementazione DOM di CsQuery è molto diversa da quella del browser perché C# è un linguaggio fortemente tipizzato e javascript non lo è. Sarebbe molto più semplice usare jsdom che è già stato scritto in javascript per questo scopo - in teoria dovrebbe funzionare come se fosse in giurisprudenza, anche se non so se qualcuno lo abbia mai provato prima. (In realtà ho iniziato a prendere in prestito i test unitari da jsdom per CsQuery). –

+0

Ho cercato in questo - ci sono un paio di cose di cui hai bisogno che non sono in Jurassic, ma c'è un altro progetto chiamato jurascript che ha i bit e le bob necessari. http://jurassic.codeplex.com/discussions/360450 – mcintyre321