Как загрузить изображение с 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");
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы