![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |