![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Код:
Код:
// возвращает код 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 |
#2
|
|||
|
|||
![]() Код:
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
|
|||
|
|||
![]() да сейчас пользуюсь такой же конструкцией:
Doc:= WebBrowser.Document as IHTMLDocument2; Content:=doc.body.innerHTML; НО, похоже здесь происходит сохранение именно структуры страницы, а не исходного HTML, потому что если сравнить код сайта и то что так сохраняется то есть различия, например тэги с больших букв, порядок свойств разный, некоторые значения свойств не в скобках. Вообще с виду не критично, но что-то подсказывает что надёжнее парсить оригинал. Последний раз редактировалось ffjeroifjeo, 17.05.2012 в 19:10. |