Esecuzione di script in HtmlAgilityPack

c# html-agility-pack javascript

Domanda

Sto cercando di raschiare una pagina web particolare che funziona come segue.

Prima carica la pagina, quindi esegue una sorta di javascript per recuperare i dati necessari per popolare la pagina. Sono interessato a quei dati.

Se ottengo la pagina con HtmlAgilityPack, lo script non viene eseguito, quindi ottengo quella che è essenzialmente una pagina per lo più vuota.

C'è un modo per costringerlo a eseguire uno script, quindi posso ottenere i dati?

Risposta accettata

Stai ottenendo ciò che il server sta restituendo, proprio come un browser web. Un browser Web, ovviamente, esegue quindi gli script. Html Agility Pack è un parser HTML solo - non ha modo di interpretare il javascript o di collegarlo alla sua rappresentazione interna del documento. Se volessi eseguire lo script avresti bisogno di un browser web. La risposta perfetta al tuo problema sarebbe un browser web "senza testa" completo. Questo è qualcosa che incorpora un parser HTML, un interprete javascript e un modello che simula il DOM del browser, lavorando tutti insieme. Fondamentalmente, questo è un browser web, tranne senza la parte di rendering di esso. Al momento non esiste una cosa che funzioni interamente all'interno dell'ambiente .NET.

La soluzione migliore è utilizzare un controllo WebBrowser e in realtà caricare ed eseguire la pagina in Internet Explorer sotto controllo programmatico. Questo non sarà veloce o carino, ma farà quello che devi fare.

Vedi anche la mia risposta a una domanda simile: carica un DOM ed esegui javascript, lato server, con .Net che discute della tecnologia disponibile in .NET per farlo. La maggior parte dei pezzi esiste in questo momento, ma non ci sono ancora o non sono stati integrati nel modo giusto, sfortunatamente.


Risposta popolare

È possibile utilizzare Awesomium per questo, http://www.awesomium.com/ . Funziona abbastanza bene, ma non ha supporto per x64 e non è thread-safe. Lo sto usando per scansionare alcuni siti web 24x7 e funziona bene per almeno un paio di giorni consecutivi, ma di solito si blocca.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché