|
Вопрос # 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);
- var
- ViewObject: IViewObject;
- sourceDrawRect: TRect;
- begin
- if EmbeddedWB1.Document < > nil then
- try
- EmbeddedWB1.Document.QueryInterface(IViewObject, ViewObject);
- if ViewObject < > nil then
- try
- sourceDrawRect := Rect(0, 0, Image1.Width, Image1.Height);
- ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle,
- image1.Canvas.Handle, @sourceDrawRect, nil, nil, 0);
- finally
- ViewObject._Release;
- end;
- except
- end;
- end;
-
-
- procedure generateJPEGfromBrowser(browser: iWebBrowser2; jpegFQFilename: String;
- srcHeight: Integer; srcWidth: Integer; tarHeight: Integer; tarWidth: Integer);
- var
- sourceDrawRect : TRect;
- targetDrawRect: TRect;
- sourceBitmap: TBitmap;
- targetBitmap: TBitmap;
- jpeg: TJPEGImage;
- viewObject: IViewObject;
- begin
- sourceBitmap := TBitmap.Create ;
- targetBitmap := TBitmap.Create ;
- jpeg := TJPEGImage.Create ;
- try
- try
- sourceDrawRect := Rect(0,0, srcWidth , srcHeight );
- sourceBitmap.Width := srcWidth ;
- sourceBitmap.Height := srcHeight ; viewObject := browser as IViewObject; if viewObject = nil then
- Exit; 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);
- finally
- jpeg.free;
- sourceBitmap.free ;
- targetBitmap.free;
- end;
- except
-
- end;
- 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;
-
-
-
-
-
-
-
- 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;
-
-
-
-
-
- var
- HTMLDocument: 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|