• ⚡️ Последний шанс: Вебинар по пентесту стартует через 30 минут!

    Друзья, ровно через 30 минут (8 июля в 19:00) начинается наш практический вебинар по пентесту и поиску уязвимостей!

    Если вы хотите:
    🕵️‍♀️ Узнать, как находить и эксплуатировать уязвимости в веб-приложениях.
    💡 Получить ценные инсайты от настоящего эксперта.
    🚀 Сделать решительный шаг в мир кибербезопасности.
    То этот вебинар для вас!

    Ведущий вебинара – Александр Медведев – эксперт с более чем 10-летним опытом в сфере информационной безопасности, пятикратный победитель Standoff и обладатель престижных сертификаций: OSWE, OSCP, PNPT, CEH, CWAPT.

    Успейте присоединиться! Зарегистрироваться сейчас

    Возникли сложности с регистрацией? Пишите нам: @Codeby_Academy
    Будем вас ждать!

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

  • Автор темы Автор темы Admin
  • Дата начала Дата начала
A

Admin

Не подскажете безграмотному как заставить свою программу сохранять открывающуюся (или открывшуюся) 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 страница, а папки с рисунками я не нахожу. Может быть в этом все дело?
 
Можно , но там нужны модули 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

...???
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы