TWebBrowser — перехватывает событие получения

Я пытаюсь автоматически отправить форму и сохранить полученное изображение, которое отображается в объекте TWebBrowser.

Изображение загружается в течение нескольких последовательных запросов javascript (ajax), пока, наконец, не появится в документе.

Как лучше всего получить это изображение? Я подумал о подключении функции получения, чтобы иметь возможность видеть http-ответ (который, по сути, был бы моим изображением).

Другой возможностью может быть загрузка изображения из кеша/памяти...

Я понятия не имею, как это сделать на практике, я надеюсь, что кто-то может помочь.

Спасибо.


person maxedmelon    schedule 01.09.2010    source источник


Ответы (3)


вы можете получить все изображения URL, используя изображения из объекта IHTMLDocument2.

см. этот пример с использованием события OnDocumentComplete.

procedure TForm2.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
HTMLDocument2: IHTMLDocument2;
i            : Integer;
Item         : IHTMLElement;
ImageUrl     : string;
begin
    HTMLDocument2 := (WebBrowser1.Document AS IHTMLDocument2);
    for i := 0 to HTMLDocument2.images.length -1 do
    begin
    Item := HTMLDocument2.images.item(i, null) As IHTMLElement;
    ImageUrl:=item.getAttribute('src',0);
     //do your stuff with the url image retrieved
    end;
end;
person RRUZ    schedule 01.09.2010
comment
Спасибо, это сработало. Любая идея, как я могу загрузить изображение через TWebBrowser (мне нужны те же данные сеанса / файлы cookie, поэтому я не могу использовать urlmon/indy/...) - person maxedmelon; 02.09.2010

Вы можете использовать события OnDocumentComplete или OnNavigateComplete2 (см. справку SHDocVw) или подождать, пока WebBrowser окажется в ReadyState READYSTATE_COMPLETE, а затем прочитать из WebBrowser.Document.

Но вы также можете (более простой IMO) использовать TIdHTTP.Get для прямого получения потока ответов.

person Francesca    schedule 01.09.2010
comment
Мне нужно знать точный URL-адрес изображения для TidHTTP.Get, что не так просто. Также я не могу прочитать изображение из Документа, потому что это не тег ‹img›, а загруженный в контейнер через AJAX. - person maxedmelon; 02.09.2010
comment
Не могу прочитать изображение из Документа... Неправда. Вы можете использовать коллекцию изображений, и у вас есть доступ ко всему остальному, что находится внутри документа. - person Francesca; 02.09.2010

Чтобы ваше приложение было более масштабируемым, вы можете напрямую попробовать EmbeddedWB. Он обертывает IWebBrowser2 и очень удобен в использовании. Embarcadero использует EmbeddedWB в своем RADStudio.

person Tavel    schedule 02.09.2010
comment
Приобрету новую RAD Studio и попробую. Я тоже видел какой-то объект TIEDownload. Если мне повезет, он загружает файл, используя те же данные сеанса, что и объект TWebBrowser... - person maxedmelon; 02.09.2010