2012-01-23 11 views
7

Hay un sitio web de informes cuyo contenido quiero analizar en C#. Traté de descargar el html con WebClient pero luego no obtuve la fuente completa ya que la mayoría se genera a través de js cuando visito el sitio web.Descargar js generado html con C#

Intenté usar WebBrowser pero no pude hacerlo funcionar en una aplicación de consola, incluso después de usar Application.Run() y SetApartmentState (ApartmentState.STA).

¿Hay alguna otra forma de acceder a este html generado? También eché un vistazo a mshtml pero no pude resolverlo.

Gracias

Respuesta

3

El Javascript es ejecutado por el navegador. Si su aplicación de consola obtiene el JS, está funcionando como se esperaba, y lo que realmente necesita es que su aplicación de consola ejecute el código JS que se descargó.

+0

Terminé con esto, pero fue una molestia implementarlo. Gracias – lander16

3

Se puede utilizar un navegador sin cabeza - XBrowser puede servidor.

De lo contrario, intente con HtmlUnit como se describe en this blog post.

+0

Olvidé mencionar que no puedo usar ninguna biblioteca externa. De lo contrario, esto hubiera sido genial. Gracias – lander16

+0

@ lander16 - Entonces 'WebBrowser' es su única opción. http://stackoverflow.com/questions/5519294/getting-webbrowser-control-to-work-in-console-application – Oded

0

Simplemente un comentario aquí. No debería haber ninguna diferencia entre realizar una solicitud HTTP con algún código C# y la solicitud generada por un navegador. Si la página web de destino se confunde y no genera el marcado correcto porque no puede distinguir entre el tipo de navegador piensa que está sirviendo, entonces tal vez todo lo que tiene que hacer es configurar el agente de usuario de la siguiente manera:

((HttpWebRequest)myWebClientRequest).UserAgent = "<a valid user agent>"; 

Por ejemplo, mi agente de usuario actual es:

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 

Tal vez que lo hace que la página funcionará correctamente. Puede haber otros factores en juego aquí, como el referrer y demás, pero probaría esto primero y veré si funciona.

+0

La razón por la que no está obteniendo lo que está esperando es debido a JavaScript que se ejecuta en el sitio. Un HttpWebRequest no ejecutará JavaScript. Está en el camino correcto con WebBrowser. – SoWeLie

0

Su mejor opción es abandonar la ruta de la aplicación de consola y crear una aplicación de Windows Forms. En ese caso, WebBrowser funcionará sin ningún trabajo necesario.

Cuestiones relacionadas