2012-01-31 18 views
11

¿Sin usar la API?Cómo obtener una imagen de mshtml.htmlimg en el disco duro

Sé que hay varias formas.

Estoy usando la biblioteca mshtml por cierto, que es mejor que el control del webbrowser. Estoy efectivamente automatizando Internet Explorer directamente.

Básicamente prefiero una forma de ver la imagen correcta sin tener que conocer la URL del htmlimg y descargarlo.

Sé que puedo tomar URL del elemento de imagen y descargarlo con webclient. La imagen cambia según las cookies y el IP. De modo que no lo haría do.

Quiero que las imágenes exactas que muestra el elemento htmlimg sean las almacenadas.

Básicamente, como si alguien estuviera tomando una captura de pantalla local de lo que aparece en la pantalla.

Respuesta

1

Hay una vieja solución para esta aquí:

http://p2p.wrox.com/c/42780-mshtml-how-get-images.html#post169674

En estos días, aunque es probable que desee revisar el HTML agilidad Paquete:

http://htmlagilitypack.codeplex.com/

La documentación no es exactamente genial sin embargo; por lo que este fragmento de código puede ayudar:

HtmlDocument htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(html); 

// You can also load a web page by utilising WebClient and loading in the stream - use one of the htmlDoc.Load() overloads 

var body = htmlDoc.DocumentNode.Descendants("body").FirstOrDefault(); 

foreach (var img in body.Descendants("img")) 
{ 
    var fileUrl = img.Attributes["src"].Value; 
    var localFile = @"c:\localpath\tofile.jpg"; 

    // Download the image using WebClient: 
    using (WebClient client = new WebClient()) 
    { 
     client.DownloadFile("fileUrl", localFile); 
    } 
} 
+0

La solución cuenta con conocer la URL y descargarla directamente. La imagen no depende únicamente de la URL, sino también de las cookies y la información del proxy. Puedo imitar la información de proxy y cookies para webclient, pero eso es complicado. –

Cuestiones relacionadas