| 
| 
 | Вопрос # 1 749/ вопрос решён / | 
 |  Здравствуйте, уважаемые эксперты!Можно ли через Delphi сохранить указанную web-страницу и как? Спасибо.
 
|  |   Вопрос задал: Евгений Eklmn (статус: Посетитель)Вопрос отправлен: 4 июля 2008, 15:57
 Состояние вопроса: решён, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Feniks Здравствуйте, Трофимов Евгений!Держите несколько примеров в Приложении:
 1. Как сохранить веб страничку в bitmap?
 2. Как сохранить веб страничку в jpg?
 3. Как сохранить все картинки TWebbrowser?
 4. Как сохранить исходник HTML из TWebBrowser.Document на диск?
 5. Как получить полный исходник HTML?
 
 Желаю удачи.
 Приложение:Переключить в обычный режим  procedure TForm1.Button1Click(Sender: TObject);varViewObject: IViewObject;sourceDrawRect: TRect;beginif EmbeddedWB1.Document < > nil thentryEmbeddedWB1.Document.QueryInterface(IViewObject, ViewObject);if ViewObject < > nil thentrysourceDrawRect := Rect(0, 0, Image1.Width, Image1.Height);ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle,image1.Canvas.Handle, @sourceDrawRect, nil, nil, 0);finallyViewObject._Release;end;exceptend;end;  procedure generateJPEGfromBrowser(browser: iWebBrowser2; jpegFQFilename: String;srcHeight: Integer; srcWidth: Integer; tarHeight: Integer; tarWidth: Integer);varsourceDrawRect : TRect;targetDrawRect: TRect;sourceBitmap: TBitmap;targetBitmap: TBitmap;jpeg: TJPEGImage;viewObject: IViewObject;beginsourceBitmap := TBitmap.Create ;targetBitmap := TBitmap.Create ;jpeg := TJPEGImage.Create ;trytrysourceDrawRect := Rect(0,0, srcWidth , srcHeight );sourceBitmap.Width := srcWidth ;sourceBitmap.Height := srcHeight ; viewObject := browser as IViewObject; if viewObject = nil thenExit; OleCheck(viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, self.Handle, targetDrawRect := Rect(0,0, tarWidth, tarHeight);targetBitmap.Height := tarHeight;targetBitmap.Width := tarWidth; jpeg.Assign(targetBitmap) ;makeFileWriteable(jpegFQFilename);jpeg.SaveToFile (jpegFQFilename);finallyjpeg.free;sourceBitmap.free ;targetBitmap.free;end;except end;end;  usesUrlMon; function DownloadFile(SourceFile, DestFile: string): Boolean;begintry   Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0,     nil) = 0;except   Result := False;end;end; procedure TForm1.Button1Click(Sender: TObject);vark, p: Integer;Source, dest, ext: string;beginfor k := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 dobegin   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;       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      FileStream.Free; end; end;  procedure TForm1.Button1Click(Sender: TObject); begin if SaveDialog1.Execute then    SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1); end;  try WebBrowser1.ExecWB(4, 0); except on E: Exception do msError:=true; end;      varHTMLDocument: IHTMLDocument2;PersistFile: IPersistFile;begin...HTMLDocument := WebBrowser1.Document as IHTMLDocument2;PersistFile := HTMLDocument as IPersistFile;PersistFile.Save(StringToOleStr('test.htm'), True); while HTMLDocument.readyState < > 'complete' do   Application.ProcessMessages;...end;  
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 4 июля 2008, 18:01
 Оценка за ответ: 5
 |  Ответ #2. Отвечает эксперт: min@y™ Внесу свои 5 копеек. Вот мой класс для закачки web-страниц на винт без участия TWebBrowser. Там используются таке функции модуля WinInet как:
 
 InternetOpenUrl()
InternetReadFile()
InternetQueryDataAvailable()
 Прикрепляю модуль как файл.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 5 июля 2008, 09:38
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 5 июля 2008, 13:39; участников в обсуждении: 1. 
|   | Вадим К (статус: Академик), 5 июля 2008, 13:39 [#1]:А помоему, за такие вопросы нужно банить задающих. Неужели так сложно просмотреть список уже заданных вопросов и найти там готовые. например вопрос 1721.    Близкие 1603, 1608, 1636. Это только беглый просмотр. А также зайти в радел статей и найти там несколько готовых статей на эту тему
 Synapse
 Читаем цитаты с bash.org.ru своей программой
 Скачиваем файлы из интернета
 Галочка "подтверждения прочтения" - вселенское зло. |  31 января 2011, 19:31: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |