Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сохранить исходный код всех фреймов TWebBrowser

Delphi , Интернет и Сети , Браузер

Сохранить исходный код всех фреймов TWebBrowser

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   ActiveX;

 function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2;
 var
   OleContainer: IOleContainer;
   enum: IEnumUnknown;
   unk: IUnknown;
   Fetched: PLongint;
 begin
   while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
     Application.ProcessMessages;
   if Assigned(Webbrowser1.document) then
   begin
     Fetched := nil;
     OleContainer := Webbrowser1.Document as IOleContainer;
     OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
     Enum.Skip(FrameNo);
     Enum.Next(1, Unk, Fetched);
     Result := Unk as IWebbrowser2;
   end
   else
     Result := nil;
 end;

 // Load sample page 
// Testseite laden 
procedure TForm1.Button1Click(Sender: TObject);
 begin
   Webbrowser1.Navigate('http://www.warebizprogramming.com/tutorials/html/framesEx1.htm');
 end;

 // Save all frames in single files 
// Alle Frameseiten in einzelne Dateien speichern 
procedure TForm1.Button2Click(Sender: TObject);
 var
   IpStream: IPersistStreamInit;
   AStream: TMemoryStream;
   iw: IWebbrowser2;
   i: Integer;
   sl: TStringList;
 begin
   for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do
   begin
     iw := GetFrame(i);
     AStream := TMemoryStream.Create;
     try
       IpStream := iw.document as IPersistStreamInit;
       if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then
       begin
         AStream.Seek(0, 0);
         sl := TStringList.Create;
         sl.LoadFromStream(AStream);
         sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt');
         //  memo1.Lines.LoadFromStream(AStream); 
        sl.Free;
       end;
     except
     end;
     AStream.Free;
   end;
 end;

 end.

Программа на Delphi, использующая компонент TWebBrowser для взаимодействия с веб-страницами и сохранения отдельных кадров в текстовых файлах.

Вот обзор кода:

  1. Функция GetFrame принимает целочисленный параметр FrameNo и возвращает интерфейс IWebbrowser2 для указанного кадра.
  2. Процедура Button1Click загружает примерную страницу в компонент TWebBrowser с помощью метода Navigate.
  3. Процедура Button2Click сохраняет все кадры в текущем документе как отдельные текстовые файлы.

Вот подробное описание кода:

Функция GetFrame

  • Она ожидает полной загрузки веб-браузера, используя цикл, который проверяет свойство ReadyState.
  • Если документ загружен, она получает интерфейс IOleContainer из документа и перечисляет его встроенные объекты (кадры) с помощью метода EnumObjects.
  • Она пропускает указанный кадр номером с помощью метода Skip и затем получает следующий объект в перечислении с помощью метода Next.
  • Полученный объект кастится в интерфейс IWebbrowser2, который возвращается как результат.

Процедура Button1Click

  • Загружает примерную страницу в браузер с помощью метода Navigate.

Процедура Button2Click

  • Перебирает все кадры в документе с помощью цикла for.
  • Для каждого кадра она вызывает функцию GetFrame, чтобы получить интерфейс IWebbrowser2 для этого кадра.
  • Создает объект TMemoryStream, чтобы хранить содержимое кадра, и затем использует интерфейс IPersistStreamInit, чтобы сохранить документ кадра в поток.
  • Сохраненный поток загружается в объект TStringList, который затем сохраняется как текстовый файл с помощью метода SaveToFile.

Предложения

  1. Вы можете улучшить читаемость кода, добавив более комментариев и описывая, что каждый раздел кода делает.
  2. Рассмотрите использование механизмов обработки ошибок для ловли и обработки потенциальных исключений, которые могут возникнуть при выполнении кода.
  3. Вместо использования жесткого пути файла в процедуре Button2Click, рассмотрите возможность позволить пользователю указать кастомный каталог или имя файла.
  4. Вы можете также использовать встроенную поддержку web-скрейпинга Delphi с помощью метода GetHTML компонента TWebBrowser, который может использоваться для извлечения конкретного содержимого из веб-страницы.

В целом, код хорошо структурирован и легко понятен. Однако есть некоторые минимальные улучшения, которые можно сделать, чтобы сделать его более robust и пользовательским.

Статья описывает способ сохранения кода всех фреймов TWebBrowser в отдельных файлах с использованием Delphi и ActiveX-компоненты.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 15:23:39/0.0039091110229492/0