2012-07-09 16 views
10

Estoy tratando de rozar una página web particular que funciona de la siguiente manera.Ejecutando scripts en HtmlAgilityPack

Primero se carga la página, luego ejecuta algún tipo de javascript para recuperar los datos que necesita para llenar la página. Estoy interesado en esa información.

Si obtengo la página con HtmlAgilityPack, la secuencia de comandos no se ejecuta, así que obtengo una página básicamente en blanco.

¿Hay alguna manera de obligarlo a ejecutar un script, para que pueda obtener los datos?

+0

eche un vistazo a http://phantomjs.org/ –

Respuesta

9

Está obteniendo lo que el servidor está devolviendo, al igual que un navegador web. Un navegador web, por supuesto, luego ejecuta los scripts. Html Agility Pack es un analizador de HTML solamente; no tiene forma de interpretar el javascript ni de vincularlo a su representación interna del documento. Si quisiera ejecutar el script, necesitaría un navegador web. La respuesta perfecta a su problema sería un navegador web completo "sin cabeza". Eso es algo que incorpora un analizador HTML, un intérprete de JavaScript y un modelo que simula el DOM del navegador, todos trabajando juntos. Básicamente, eso es un navegador web, excepto sin la parte de representación. En este momento, no existe tal cosa que funcione completamente dentro del entorno .NET.

Su mejor opción es usar un control WebBrowser y cargar y ejecutar la página en Internet Explorer bajo control programático. Esto no será rápido o bonito, pero hará lo que necesita hacer.

También vea mi respuesta a una pregunta similar: Load a DOM and Execute javascript, server side, with .Net que analiza la tecnología disponible en .NET para hacer esto. La mayoría de las piezas existen en este momento, pero aún no están del todo disponibles o no se han integrado de la manera correcta, desafortunadamente.

+0

La fuga de la Manija/Memoria GDI + causada por el control WebBrowser es lo que me está impulsando a buscar alternativas. Lamento que no haya una solución adecuada para este problema. – Aabela

+0

Bummer. Sí, este es uno de esos lugares que aún no está allí, al menos si lo mantienes todo dentro de .NET. Si puedes vivir con una aplicación híbrida, definitivamente hay formas de hacerlo, pero será más complicado. Sigo esperando que alguien haga el trabajo de crear en un navegador sin cabeza unificado completamente en .NET. Pero definitivamente no es una tarea pequeña. Como dije, muchas de las piezas están ahí, pero alguien tiene que unirlas. –

3

Puede usar Awesomium para esto, http://www.awesomium.com/. Funciona bastante bien pero no tiene soporte para x64 y no es seguro para subprocesos. Lo estoy usando para escanear algunos sitios web 24x7 y funciona bien durante al menos un par de días seguidos, pero generalmente falla.

Cuestiones relacionadas