Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить страницу WebBrowser с картинками 
:(
    Опции темы
Voyager
Дата 27.3.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Перерыл кучу сайтов, нашел пару тем на форуме, но ответа либо нет, либо ни один пример не работает. Собственно вопрос - как можно сохранить страницу со всем содержимым на диск (не прибегая к открытию диалога Save As) или как хотя бы получить доступ к картинкам WebBrowser, чтобы вывести их в TImage (не прибегая к повторному скачиванию картинок)?
PM   Вверх
Snowy
Дата 28.3.2006, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 4
Всего: 484



Из DRKB:
Цитата
TWebBrowser.Document включает в себя IPersistStreamInit который содержит метод Save(). Всё, что нам нужно знать, это как использовать данный метод с объектом, который включён в IStream. Для этого мы просто воспользуемся TStreamAdapter.

Обратите внимание, что интерфейсы IPersistStreamInit и IStream объявлены внутри ActiveX unit.

Итак, вот так это выглядит.

Код

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;  

pocedure TForm1.Button1Click(Sender: TObject);  
begin  
  if SaveDialog1.Execute then  
    SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1);  
end;

Цитата
А как сохранить вместе с исходником все файлы (.CSS, JPG, GIF Etc..) ?


Код

try  
  WebBrowser1.ExecWB(4, 0);  
except  
  on E: Exception do  msError:=true;  
end;



Как сохранить все картинки:
Код
uses 
  UrlMon; 

function DownloadFile(SourceFile, DestFile: string): Boolean; 
begin 
  try 
    Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, 
      nil) = 0; 
  except 
    Result := False; 
  end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
  k, p: Integer; 
  Source, dest, ext: string; 
begin 
  for k := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do 
  begin 
    Source := WebBrowser1.OleObject.Document.Images.Item(k).Src; 
    p := LastDelimiter('.', Source); 
    ext := UpperCase(Copy(Source, p + 1, Length(Source))); 
    if (ext = 'GIF') or (ext = 'JPG') then 
    begin 
      p  := LastDelimiter('/', Source); 
      dest := ExtractFilePath(ParamStr(0)) + Copy(Source, p + 1, 
        Length(Source)); 
      DownloadFile(Source, dest); 
    end; 
  end; 
end;

PM MAIL   Вверх
December
Дата 28.3.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Snowy, вопрос читал? smile
Ни одна из твоих цитат из DRKB не удовлетворяет условиям вопроса smile
Voyager, на данный момент однозначного ответа на твой вопрос нет. Единственное, что можно попробовать - это перескачивание картинок из инета, с надеждой, что они на самом деле возьмутся из кэша.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Voyager
Дата 28.3.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Snowy, спасибо, но я все это читал и пробовал (в первом сообщении я написал что как раз этого и надо избежать), перекачивание не проходит, картинки динамические.
Находил только такой пример, но он у меня не работает.
А может есть способ брать картинки из кэша, ведь они уже там должны быть?

Это сообщение отредактировал(а) Voyager - 28.3.2006, 12:25
PM   Вверх
Rennigth
Дата 28.3.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: нет
Всего: 76



Цитата(Voyager @ 28.3.2006, 12:23 Найти цитируемый пост)
А может есть способ брать картинки из кэша, ведь они уже там должны быть

Не факт, зависит от Flags(navNoWriteToCache) при Navigate.
Добавлено @ 12:53
А впринципе должно работать.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Voyager
Дата 29.3.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



А пример по ссылке можно как то модифицировать, чтобы работал?
PM   Вверх
Magister Y0da
  Дата 21.9.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зелёненький
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 30.11.2004

Репутация: нет
Всего: 2



Цитата(Snowy @ 28.3.2006,  08:34)
Из DRKB: 
Цитата
TWebBrowser.Document включает в себя IPersistStreamInit который содержит метод Save(). Всё, что нам нужно знать, это как использовать данный метод с объектом, который включён в IStream. Для этого мы просто воспользуемся TStreamAdapter. 

Обратите внимание, что интерфейсы IPersistStreamInit и IStream объявлены внутри ActiveX unit. 

Итак, вот так это выглядит. 

Код

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;  

pocedure TForm1.Button1Click(Sender: TObject);  
begin  
  if SaveDialog1.Execute then  
    SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1);  
end;
  
Цитата
А как сохранить вместе с исходником все файлы (.CSS, JPG, GIF Etc..) ? 


Код

try  
  WebBrowser1.ExecWB(4, 0);  
except  
  on E: Exception do  msError:=true;  
end;

не очень понял данный исходник...
в общем задача в том чтобы сохранить все файлы, можно даже без исходника.
как это сделать?

В любом браузере есть функция "Сохранить как -> Веб-страница, полностью" - нужен аналог данной функции на Delphi

или можно по другому
мне нужно доставать каптчу с сервиса reCAPTCHA.net
на сайте использующем данный сервис в исходнике страницы видно только
Код
<script type="text/javascript" src="http://api.recaptcha.net/challenge?k=код_сайта"></script> 
 
    <noscript> 
        <iframe src="http://api.recaptcha.net/noscript?k=код_сайта" height="300" width="500" frameborder="0"></iframe><br/> 
        <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> 
        <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/> 
    </noscript>


Это сообщение отредактировал(а) Magister Y0da - 21.9.2009, 16:36
--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.4232 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.