Как загрузить изображение с WEB страницы, не используя его URL адрес - VB
Формулировка задачи:
Задача: есть адрес веб-страницы, на которой расположена картинка.
Эта картинка при обновлении страницы меняется (скажем так - это каптча с постоянным URL-адресом).
Как программно сохранить ее на диск?
Для работы со страницей использую объект "InternetExplorer.Application"
Я нашел класс для работы с кешем, но пока не разобрался,
как ним пользоваться и умеет ли он "вытягивать" картинки.
Не по теме:
С Webbrowser какие-то проблемы. При проверке свойств .busy и .readystate
иногда
с вероятностью 50 % появляется ошибка "object does not support this property or method".
Еще нашел код, который копирует в буфер сам объект Image.
Он у меня на веб-странице такой 1. Фильтром находится правильно. Имеет тип HTMLImg ("[Object HTMLImageElement]")
Но при попытке добавления к ControlRange объекта HTMLImg получаю ошибку: "object does not support this property or method".
Решение задачи: «Как загрузить изображение с WEB страницы, не используя его URL адрес»
textual
Листинг программы
using System; using mshtml; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Battle_net_Download_Captcha_cs { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [ComImport, InterfaceType((short)1), Guid("3050F669-98B5-11CF-BB82-00AA00BDCE0B")] private interface IHTMLElementRenderFixed { void DrawToDC(IntPtr hdc); void SetDocumentPrinter(string bstrPrinterName, IntPtr hdc); } void GetImage(string id) { HtmlDocument D = webBrowser1.Document; HtmlElement e = D.GetElementById(id); int i = 0; MessageBox.Show("Процедура"); //foreach (mshtml.IHTMLImgElement img in webBrowser1.Document.Images) //{ // MessageBox.Show("Картинка"); HtmlElementCollection collection = D.Images; foreach (HtmlElement c in collection) { MessageBox.Show(c.Id); IHTMLImgElement img = (IHTMLImgElement)c.DomElement; // e.DomElement (for parsed element) IHTMLElementRenderFixed render = (IHTMLElementRenderFixed)img; Bitmap bmp = new Bitmap(img.width, img.height); Graphics g = Graphics.FromImage(bmp); IntPtr hdc = g.GetHdc(); render.DrawToDC(hdc); g.ReleaseHdc(hdc); bmp.Save("C:\\temp\\captcha" + i + ".png"); MessageBox.Show("Готово"); i ++; } //return bmp; } private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate("https://eu.battle.net/account/creation/tos.html?country=RUS"); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath) return; while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); //System.Threading.Thread.Sleep(100); } //captchaInput //Bitmap img = GetImage("sec-string"); GetImage("sec-string"); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д