Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: TWebBrowser и сохрванение страницы  (Прочитано 9554 раз)
0 Пользователей и 1 Гость смотрят эту тему.
monrus
Опытный

ru
Offline Offline

« : 09-09-2008 07:54 » 

Привет всем. Кто-нить знает как можно сохранять страницы сайтов с их содержимым. В TWebBrowser я не нашел такого.
Спасибо.
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #1 : 09-09-2008 10:40 » 

Код взят из DRKB:
Код:
procedure TForm1.SaveHTMLSourceToFile(const FileName: string; 
  WB: TWebBrowser); 
var 
  PersistStream: IPersistStreamInit; 
  FileStream: TFileStream; 
  Stream: IStream; 
  SaveResult: HRESULT; 
begin 
  PersistStream := WB.Document as IPersistStreamInit; 
  FileStream := TFileStream.Create(FileName, fmCreate); 
  try 
    Stream := TStreamAdapter.Create(FileStream, soReference) as IStream; 
    SaveResult := PersistStream.Save(Stream, True); 
    if FAILED(SaveResult) then 
      MessageBox(Handle, 'Fail to save HTML source', 'Error', 0); 
  finally 
    { В ответ на уничтожение объекта TFileStream, передаём
      soReference в конструктор TStreamAdapter. } 
    FileStream.Free; 
  end; 
end;
Только необходимо добавить unit ActiveX
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #2 : 10-09-2008 02:59 » 

спасибо. щас попробую
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #3 : 10-09-2008 03:38 » 

вот еще нашел:
Сохранение вместе с исходником все файлы (.CSS, JPG, GIF Etc..) ?
Код
1
2
3
4
5   try
       WebBrowser1.ExecWB(4, 0);
     except
       on E: Exception do  msError:=true;
     end;

А как можно сохранить всю страницу с картинками и пр. только в определенный каталог?
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #4 : 10-09-2008 05:46 » 

Цитата
WebBrowser1.ExecWB(4, 0);
Это ты просто вызываешь команду IE на сохранение страницы, естественно, при этом выскакивает диалог выбора каталога.
Простого варианта, имхо нет. Ручками, используя объектную модель IE парсить страницу и по полученным линкам загружать и сохранять картинки. Примерно так:
Код:
//загрузка имиджа по линку в поток
function LoadImage(src:string; str:TMemoryStream):boolean;
var
  istr: IStream;
  statstg: TStatStg;
  buf: string;
  pos: Int64;
  cb: Integer;
begin
 Result := False;
 try
  istr := TStreamAdapter.Create(str, soReference) as IStream;
  If URLOpenBlockingStream(nil, PChar(src), istr, 0, nil)<>S_OK then
  exit;
  istr.Stat(statstg, 0);
  If statstg.cbSize = 0 then
  exit;
  SetLength(buf, statstg.cbSize);
  istr.Seek(0, 0, pos);
  istr.Read(@buf[1], statstg.cbSize, @cb);
  str.Position:=0;
  str.Write(buf[1], statstg.cbSize);
  str.Position:=0;
 except
  exit;
 end;
 Result := True;
end;

//парсим все имеджи страницы
procedure ParsImages;
var
  doc: IHTMLDocument2;
  allEl: IHTMLElementCollection;
  img: IHTMLElement;
  i: Integer;
  srcImg: string;
  str: TMemoryStream;
begin
 doc := WebBrowser1.Document as IHTMLDocument2;
 If doc = nil then
 exit;
 allEl := doc.all;
 If allEl = nil then
 exit;
 allEl := allEl.tags('img') as IHTMLElementCollection;
 For i:=0 to allEl.length-1 do
 begin
  img:=allEl.item(i, i) as IHTMLElement;
  If img=nil then
  continue;
  srcImg := string(img.getAttribute('src', 0));//получили линк на картинку
  //код загрузки по линку и сохранения картинки
  str := TMemoryStream.Create;
  try
   If LoadImage(srcImg, str) then
   str.SaveToFile('MyFile.gif');
  finally
   str.Free;
  end;
 end;
З.Ы. Необходимо добавить юниты mshtml и ActiveX
« Последнее редактирование: 10-09-2008 05:51 от zubr » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 10-09-2008 07:40 » 

интересно то как, а шо     
TWebBrowser подгружает стили? и даже обрабатывает?
И... понимает @import ?

Тогда почему так мало хороших браузеров? Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #6 : 10-09-2008 08:55 » 

Sla, TWebBrowser - это программная оболочка IE, использующая его объектную модель. Что может IE - то может и TWebBrowser.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 10-09-2008 08:57 » 

zubr, ага, спасибо
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
monrus
Опытный

ru
Offline Offline

« Ответ #8 : 11-09-2008 02:56 » 

zubr
т.е. как ты показал в примере работает ИЕ? сохраняет каритнки и прю файлы?
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #9 : 11-09-2008 04:44 » 

Принципиально, да. А как может быть по другому? Броузер сначала загружает страницу, затем парсит все ссылки на картинки и другие объекты, все это грузит в кеш и отображает в своем окне. Другой вопрос, что механизм работы с кешем в программном интерфейсе IE никак не отображен.
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #10 : 12-09-2008 22:19 » 

ясно.спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines