Ejecutando Scripts en HtmlAgilityPack

c# html-agility-pack javascript

Pregunta

Estoy tratando de raspar una página web particular que funciona de la siguiente manera.

Primero se carga la página, luego se ejecuta algún tipo de javascript para obtener los datos que necesita para completar la página. Estoy interesado en esos datos.

Si obtengo la página con HtmlAgilityPack, el script no se ejecuta, así que obtengo lo que es esencialmente una página en blanco.

¿Hay alguna forma de forzarlo a ejecutar un script para que pueda obtener los datos?

Respuesta aceptada

Usted 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 solo un analizador HTML, no tiene forma de interpretar el javascript o vincularlo a su representación interna del documento. Si desea ejecutar el script, necesitará un navegador web. La respuesta perfecta a su problema sería un completo navegador web "sin cabeza". Eso es algo que incorpora un analizador HTML, un intérprete 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 renderización. En este momento no hay nada que funcione completamente dentro del entorno .NET.

Lo mejor es usar un control WebBrowser y, en realidad, cargar y ejecutar la página en Internet Explorer bajo el control programático. Esto no será rápido ni bonito, pero hará lo que necesites hacer.

También vea mi respuesta a una pregunta similar: cargue un DOM y ejecute javascript, del lado del servidor, con .Net que discute la tecnología disponible en .NET para hacer esto. La mayoría de las piezas existen en este momento, pero simplemente no están allí todavía o no se han integrado de la manera correcta, por desgracia.


Respuesta popular

Puede utilizar Awesomium para esto, http://www.awesomium.com/ . Funciona bastante bien, pero no es compatible con x64 y no es seguro para subprocesos. Lo estoy utilizando para escanear algunos sitios web 24x7 y funciona bien durante al menos un par de días seguidos, pero luego generalmente se bloquea.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow