Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Спецам по TWebBrowser'у [D5]


ИМХО ©   (2004-06-23 11:13:00) 

Вопрос, наверняка, ламерский.

Задача такая: нам дается некий URL. Невидимый TWebBrowser должен
выкачать эту страницу со всеми картинками, css-ами, скриптами и прочим хозяйством и локально сохранить все это.

Как это осуществить?


Jurijs   (2004-07-06 20:15:00) [1]

На delphi.about.com есть такая статья, как раз по твоему вопросу:
http://delphi.about.com/library/weekly/aa062904a.htm

Описывется способ сохранения страницы со всей графикой в один файл - Web archive, single file (*.mht).

Код такой


uses CDO_TLB, ADODB_TLB;
...
procedure WB_SaveAs_MHT(WB: TWebBrowser; FileName: TFileName);
var
 Msg: IMessage;
 Conf: IConfiguration;
 Stream: _Stream;
 URL : widestring;
begin
 if not Assigned(WB.Document) then Exit;
 URL := WB.LocationURL;
 Msg := CoMessage.Create;
 Conf := CoConfiguration.Create;
 try
   Msg.Configuration := Conf;
   Msg.CreateMHTMLBody(URL, cdoSuppressAll, '', '');
   Stream := Msg.GetStream;
   Stream.SaveToFile(FileName, adSaveCreateOverWrite);
 finally
   Msg := nil;
   Conf := nil;
   Stream := nil;
 end;
end; (* WB_SaveAs_MHT *)


и использовние:


//first navigate
WebBrowser1.Navigate(' http://delphi.about.com');
 
//then save
WB_SaveAs_MHT(WebBrowser1,'c:\WebBrowser1.mht');


Плохиш   (2004-07-06 11:49:00) [2]


> leonidus   (06.07.04 09:09) [15]
> TWebBrowser очень мошная штука, но напрямую зависимот от
> текущих настроек и в качестве ядра для скачивания чего либо
> из интрнета да еще без ведома юзересовершенно не подходит,

А что, обсуждение создания вредоносных програм, здесь уже разрешено?


Landgraph   (2004-07-06 11:35:00) [3]

Точно не знаю, может ли он сохранять как вам надо, но вообще компонент оч. хорошо развитый. Большинство вопросов возникающих в конференциях реализованы в готовых функциях:
http://www.euromind.com/iedelphi/
Спросить EmbeddedWB =)


leonidus   (2004-07-06 09:09:00) [4]

TWebBrowser очень мошная штука, но напрямую зависимот от текущих настроек и в качестве ядра для скачивания чего либо из интрнета да еще без ведома юзере совершенно не подходит, взять хотябы щелчки которые появляются при переходе со траницы на страницу...


Piter   (2004-06-30 00:35:00) [5]

Да, сразу хочу предупредить про грабли. Если в настройках IE стоит не показывать картинки, то WebBrowser их тоже не будет загружать.
Это по умолчанию... можно обойти такой факт...


Piter   (2004-06-30 00:33:00) [6]

Шаман   (23.06.04 11:21) [1]
Есть один хороший совет:
не использовать TWebBrowser :)


совет далек от хорошего... ты даже не представляешь всю мощь TWebBrowser

А вообще интересная проблема... можно попробовать использовать код типа того:

var
 vaIn, vaOut: Olevariant;
 CmdTarget: IOleCommandTarget;
begin
if WebBrowser1.Document <> nil then
 try
   WebBrowser1.Document.QueryInterface(IOleCommandTarget, CmdTarget);
   if CmdTarget <> nil then
   try
     CmdTarget.Exec(PGUID(nil), OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT, vaIn, vaOut);
   finally
     CmdTarget._Release;
   end;
 except end;


при этом все равно будет выведено окно сохранения, где пользователь должен выбрать имя файла, тип сохранения...
Можно задать файо по умолчанию определив vaIn - но без окошка все равно не обойтись, имхо... не может так WB сделать...

С другой стороны можно грузить HTML, анализировать его, потом вытягивать картинки. Не так уж это и сложно, как может показаться на первый взгляд. И уж точно осуществимо, всякие оффлайн качалки сайтов с этим прекрасно справляются...


  (2004-06-28 20:28:00) [7]

Удалено модератором


  (2004-06-28 20:05:00) [8]

Удалено модератором


  (2004-06-25 21:33:00) [9]

Удалено модератором


Algol   (2004-06-25 12:37:00) [10]


> Я извиняюсь, но ты сам пробуешь свои советы?


Ага, я не только пробую я их даже использую .)
Только давно это было. Не помню уже че он там сохраняет.
Вообще-то там дело хитрое, диалог сохранения не совпадает с тем, который высвечивается при сохранении вручную. Я тоже помню пытался сохранять всю страницу целиком  вот этот фрагмент
TWebBrowser.ExecWB(OLECMDID_SaveAS,4,FileName)
- последнее на чем я остановился в исходнике ))


ИМХО   (2004-06-24 22:48:00) [11]

Еще не могу понять, почему нет параметра для выходного файла? Может, я желаю сохранить в текстовый файл. Может в веб-архив, а сохраняет всегда html. Причем Web Page, HTML only, а не Web Page, complete(что предпочтительнее).


ИМХО   (2004-06-24 22:45:00) [12]


> Algol   (24.06.04 19:07) [5]
> TWebBrowser.ExecWB(OLECMDID_SaveAS,4,FileName)


Я извиняюсь, но ты сам пробуешь свои советы?
Он сохраняет только html-страницу, без сопровождающих файлов (картинок, скриптов, стилей)


ИМХО   (2004-06-24 20:04:00) [13]

А что значит 4?

В хэлпе только про 0-3 написано:

Constant Value Meaning

OLECMDEXECOPT_DODEFAULT 0 Use the default behavior, whether prompting the user for input or not.
OLECMDEXECOPT_PROMPTUSER 1 Execute the command after obtaining user input.
OLECMDEXECOPT_DONTPROMPTUSER 2 Execute the command without prompting the user.
OLECMDEXECOPT_SHOWHELP 3 Show help for the command, but do not execute it.


Algol   (2004-06-24 19:07:00) [14]

TWebBrowser.ExecWB(OLECMDID_SaveAS,4,FileName)


ИМХО   (2004-06-24 17:20:00) [15]

Это я пробовал еще в самом начале. Такой способ сохраняет только страницу, а нужно сохранять всё(в папке <filename>.files)


Algol   (2004-06-24 14:10:00) [16]

document.execCommand('SaveAs');


ИМХО   (2004-06-23 12:02:00) [17]

А чем пользоваться тогда?


Шаман   (2004-06-23 11:21:00) [18]

Есть один хороший совет:
не использовать TWebBrowser :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо