2011-03-20 9 views
7

Tengo uno. página aspx que tiene algunas funciones de JavaScript que controlan la paginación.WebClient ejecuta javascript

que se puede ejecutar esta función Javascript a través de navegador web con el siguiente método en el WebBrowser1_DocumentCompleted

WebBrowser1.Document.Window.DomWindow.execscript ("somefunction();", "JavaScript") 

El navegador web es muy lento y yo prefiero usar System.Net.WebClient.DownloadString.

¿Tiene alguna forma de ejecutar este script con los métodos System.Net.WebClient que son más rápidos, o de alguna otra manera?

Respuesta

19

Bueno, no. WebClient es un cliente HTTP, no un navegador web.

Un cliente HTTP sigue las especificaciones HTTP; el hecho de que sus solicitudes HTTP resulten en HTML es irrelevante para el cliente.

Un navegador web, por otro lado, además de ser un cliente HTTP, también sabe cómo analizar las respuestas HTML (y ejecutar JavaScript, etc.).

Parece que lo que estás buscando se llama un "navegador sin cabeza", que soporta cargar HTML y ejecutar JavaScript en el DOM, exactamente como lo necesites. Los navegadores sin cabeza generalmente también son bastante rápidos en comparación con los navegadores normales, ya que no necesitan hacer ningún renderizado.

Hay varios navegadores sin cabeza. HtmlUnit (que puede ser converted para ejecutar en .NET) parece una buena opción, al igual que envjs (está escrito en JavaScript, que can be embedded in .NET). Desafortunadamente, no tengo experiencia con ninguno de los dos, pero ambos se ven súper geniales, especialmente envjs. Actualización: una buena y más actualizada lista de buscadores sin cabeza ha sido published on GitHub.

También hay otros alternatives en el control WebBrowser que pueden o no ser más rápidos en su caso, si desea mantener un control.