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