ОБСУЖДЕНИЕ

Как сохранить Html на компьютер?

20 ответов 19,7 тыс.
Автор темы
Не подскажете безграмотному как заставить свою программу сохранять открывающуюся (или открывшуюся) html страничку? Если можно, приведите пожалуйста кусочек кода. Заранее спасибо!
 
Страница загружена в WebBrowser. Как сохранить ее полностью, а не только html код.
 
Выбрать пункт меню Файл -> Сохранить как... Выбрать тип файла что-то типа "Веб-страница, полностью" -> нажать "Сохранить"
 
Имеется ввиду, что на форму кинут WebBrowser1, в него загружена страница. Теперь необходимо эту страницу сохранить на жесткий диск, т.е. программно реализовать функцию Файл -> Сохранить как.
 
Ой, а я и не заметил, что это раздел "Delphi - Сети". Всё, умываю руки... :)
 
Код:
uses 
ActiveX, MSHTML_TLB, SHDocVw_TLB, 
ComCtrls, OleCtrls; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
HTMLDocument: IHTMLDocument2; 
PersistFile: IPersistFile; 
begin 
HTMLDocument := WebBrowser1.Document as IHTMLDocument2; 
PersistFile := HTMLDocument as IPersistFile; 
PersistFile.Save(StringToOleStr('c:\SavedFile.html'), System.True); 
end;
либо
раздел uses ActiveX. Двигаемся дальше теперь кидаем на форму две кнопочки (button) с закладки standart, компонент SaveDialog с закладки Dialog и компонент webBrowser с закладки internet. Так с компонентами вроде разобрались

Создаем обработчик событий(onclick) на первой кнопке и в нем прописываем следующий код:

webbrowser1.Navigate('http://www.delphiexpert.ru');

Так теперь переходим на самый верх и сразу же после public пишем:

procedure SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser);

Нажимаем комбинацию клавиш Ctrl+Shift+C

И Delphi автоматически генерирует процедуру, получиться должно примерно так:

procedure TForm1.SaveHTMLSourceToFile(const FileName: string;
WB: TWebBrowser);
begin

end;

Сейчас давайте пропишем действия, которые будет выполнять данная процедура, а именно она должна сохранять текущий открытый в компоненте webbrowser документ в виде исходника HTML

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;

Вот практически и все осталось только создать обработчик событий (onClick) на второй кнопке и прописать там:

if SaveDialog1.Execute then
SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1);
 
Спасибо!
Сейчас попробую разобраться!
 
Попробовал вторым способом!
Вот код
-------------------------------------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActiveX, OleCtrls, SHDocVw, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
SaveDialog1: TSaveDialog;
WebBrowser1: TWebBrowser;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('http://www.delphiexpert.ru');
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.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1);
end;

end.
-------------------------------------------------------------------------------------------------------
Загрузил страницу в WB нормально!
Сохранил через SD страницу как 'de.html'
Теперь пробую открыть сохраненную страницу в FireFox'е и получается следующая картина
url_bad.jpg
-------------------------------------------
а должно быть вот так
url_Norma.jpg
-------------------------------------------
Объясните, plz, в чем проблема???
 
Похоже, что css не скачивали и/или путь к нему неправильный?
 
CSS (англ. Cascading Style Sheets — каскадные таблицы стилей)
Это для меня слишком сложно...
Когда я сохраняю страницу в FireFox'e, то генерируется два файла: непосредственно html страница и папка с рисунками. В нашем же случае сохраняется только html страница, а папки с рисунками я не нахожу. Может быть в этом все дело?
 
Можно попробовать так(сохранять в MHT). или тут , но там нужны модули adodb_tlb, cdo_tlb.
Посмотреть вложение 4222
Посмотреть вложение 4223

ЗЫ Пример, который сохраняет страницу вместе с картинками
Посмотреть вложение 4224
Не могу скачать пример www.zip
Щелкаю на ссылке ADODB_TLB.pas - он открывается в новой вкладке, CDO_TLB.pas тоже открывается в новой вкладке, щелкаю по ссылке www.zip загружается страница codeby.net/ipb.html
 
ADODB_TLB.pas - он открывается в новой вкладке, CDO_TLB.pas тоже открывается в новой вкладк
правая кнопка - сохранить как.
по ссылке www.zip загружается страница codeby.net/ipb.html
не должно так быть. у меня все качает..
 
правая кнопка - сохранить как.
не должно так быть. у меня все качает..
Да, Вы правы, через правую кнопку - сохранить как закачал архив. Распаковал, запустил проект. Высветилась какая-то ошибка... нет какой-то dll... не успел заметить, т.к. нажал ОК, запустил RUN и проект скомпилировался и запустился. Загружаю URL 'http://www.delphiexpert.ru'. Загрузил нормально. Сохраняю страницу (назвал 'de.html') в отдельную папку. Рисунки тоже сохраняются.
Save_URU.jpg
Теперь запускаю файл 'de.html' в Google Chrome или FireFox'e и вот что получается:
URL_in_Chrome.jpg
 
Хром не умеет открывать mht файы. Открывайте IE
 
Хром не умеет открывать mht файы. Открывайте IE
Perfect!!!
Открыл сохраненную на жестком диске страницу в IE. Страница открылась идеально со всеми рисунками!
Всем кто помогал в раскрытии темы огромное СПАСИБО и RESPECT!
 
Хром не умеет открывать mht файы. Открывайте IE
Возникла следующая проблема.
Если открывать документ, сохраненный в выше приведенном примере (www.zip) в Internet Explorer'е, то он открывается нормально. Но если документ открывать в WebBrowser1 нашего проекта, то вылетает сообщение:
oshibka_scenariya.jpg
Добавил в проект OpenDialog и копку для загрузки файла; в качестве документа использовал страницу 'https://codeby.net/threads/18385.html', которую сохранил как 'codeby.mht'.

Вот добавленный код:

procedure TForm36.FormCreate(Sender: TObject);
begin
Edit1.Text:='https://codeby.net/threads/18385.html';
end;

procedure TForm36.ButtonLoadClick(Sender: TObject);
begin
if Opendialog1.Execute then
WebBrowser1.Navigate(opendialog1.fileName);
end;

Что нужно сделать, чтобы избежать ошибки?
 
Хром не умеет открывать mht файы. Открывайте IE
И еще!
Если соединение с интернетом по какой-либо причине отсутствует (например, нет вообще), то даже в Internet Explorer'e страница открывается не корректно
bez_interneta.jpg

...???