Вопрос пользователя заключается в необходимости автоматически отправить форму и сохранить изображение, которое отображается в объекте TWebBrowser. Изображение загружается поэтапно с помощью JavaScript-запросов (AJAX), и после нескольких запросов оно появляется в документе. Пользователь рассматривал возможность перехвата функции receive для анализа HTTP-ответов, которые могли бы содержать нужное изображение, а также загрузки изображения из кэша или памяти.
Решение проблемы
Для решения этой задачи можно использовать события OnDocumentComplete или OnNavigateComplete2, которые предоставляют информацию о завершении загрузки документа. Также можно дождаться, когда состояние WebBrowser перейдет в READYSTATE_COMPLETE, и затем работать с документом WebBrowser.Document.
Однако, для упрощения задачи, можно использовать компонент TIdHTTP для прямого получения потока ответа. Это требует знания точного URL изображения, которое может быть неочевидным. В случае, когда изображение не загружается через тег <img>, а загружается в контейнер через AJAX, стандартный способ чтения документа может быть неприменим.
Подтвержденное решение
Для получения всех URL изображений можно использовать свойство images объекта IHTMLDocument2. Пример кода, использующего событие OnDocumentComplete, показывает, как извлечь URL изображений:
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, nil) as IHTMLElement;
ImageUrl := Item.getAttribute('src', 0);
// Здесь можно выполнить действия с полученным URL изображения
end;
end;
Пользователь подтвердил, что данное решение работает, и спрашивает о способе загрузки изображения через TWebBrowser, сохраняя при этом данные сессии и cookies.
Альтернативное решение
Для более масштабируемого применения в приложении можно использовать EmbeddedWB, который оборачивает IWebBrowser2 и предоставляет удобные возможности для работы. Компонент EmbeddedWB используется в RAD Studio от Embarcadero. Также упоминается TIEDownload, который может загружать файлы, используя данные сессии TWebBrowser.
Заключение
Для автоматизации отправки форм и сохранения изображений, отображаемых в TWebBrowser, можно использовать различные подходы, включая перехват событий загрузки документа и прямое получение потока ответа с использованием TIdHTTP. Важно учитывать, что URL изображения может быть неочевиден, и для его получения может потребоваться анализ загружаемого документа. Использование дополнительных компонентов, таких как EmbeddedWB, может упростить процесс работы с TWebBrowser и предоставить более широкие возможности для автоматизации.
Автоматическая отправка форм и сохранение изображений в среде Delphi с использованием TWebBrowser, включающая перехват запросов и работу с кэшем.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.