Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.05.2012, 18:26
ffjeroifjeo ffjeroifjeo вне форума
Прохожий
 
Регистрация: 01.09.2011
Сообщения: 22
Репутация: 10
По умолчанию TWebBrowser сохранение HTML, странное поведение

Код:
Код:
// возвращает код HTML
function TForm1.GetHTMLCode(WebBrowser: TWebBrowser): String;
 var
   ps: IPersistStreamInit;
   not13, ss: TStringStream;
   sa: IStream;
   ssUTF8, s: string;
   Res: Boolean;
 begin
   ps := WebBrowser.Document as IPersistStreamInit;
   s := '';
   ss := TStringStream.Create(s);
   try
     sa := TStreamAdapter.Create(ss, soReference) as IStream;
     Res := Succeeded(ps.Save(sa, True));

     if Res then
       Result := ss.DataString;
       
   finally
     ss.Free;
   end;
 end;

// обработчик OnDocumentComplete
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin

...
    Memo1.Text := '';
    Content := GetHTMLCode(WebBrowser1);
    Memo1.Text := Content;
...
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  WebBrowser1.Navigate('rambler.ru');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    WebBrowser1.Navigate('http://love.rambler.ru/partner/link.phtml?pid=482400&lid=8206');
end;

если последовательно нажимать на кнопки сначала WebBrowser1.Navigate('rambler.ru');, потом WebBrowser1.Navigate('http://love.rambler.ru/partner/link.phtml?pid=482400&lid=8206');
то функция GetHTMLCode нормально возвращает HTML контент.
Если кнопкой загрузить WebBrowser1.Navigate('rambler.ru');, а потом в самом WebBrowser нажать на ссылку "http://love.rambler.ru/partner/link.phtml?pid=482400&lid=8206", то возвращается переменная Content пустая, причём Res := Succeeded(ps.Save(sa, True));, Res возвращается False,
должно быть True.

Получается что когда один раз грузишь через Navigate, то нормально, а когда после этого в самом браузере нажимаешь ссылку Content пустой.

Во вложенном файле проект.
Инструменты: WinXP + Delphi 2007
Вложения
Тип файла: rar Project.rar (221.4 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 17.05.2012, 18:55
wendstor wendstor вне форума
Прохожий
 
Регистрация: 13.10.2010
Сообщения: 30
Репутация: 11
По умолчанию

Код:
uses mshtml, activex;

var
  WB : TWebBrowser;
  Document: IHTMLDocument2;
begin
 Document := WB.Document as IHtmlDocument2;
 if Document < >  nil then
   Memo1.Text := (Document.all.Item(NULL, 0) as IHTMLElement).OuterHTML;

Bargest: оформляем код в соответствиями с правилами форума!

или с помощью Indy IdHTTP

Последний раз редактировалось Bargest, 17.05.2012 в 22:10.
Ответить с цитированием
  #3  
Старый 17.05.2012, 19:07
ffjeroifjeo ffjeroifjeo вне форума
Прохожий
 
Регистрация: 01.09.2011
Сообщения: 22
Репутация: 10
По умолчанию

да сейчас пользуюсь такой же конструкцией:
Doc:= WebBrowser.Document as IHTMLDocument2;
Content:=doc.body.innerHTML;

НО, похоже здесь происходит сохранение именно структуры страницы, а не исходного HTML, потому что если сравнить код сайта и то что так сохраняется то есть различия, например тэги с больших букв, порядок свойств разный, некоторые значения свойств не в скобках.

Вообще с виду не критично, но что-то подсказывает что надёжнее парсить оригинал.

Последний раз редактировалось ffjeroifjeo, 17.05.2012 в 19:10.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:04.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025