Страница 1 из 1
WebBrowser и OnNavigateComplete2: как проверить загрузку страницы в цикле
Добавлено: 19 ноя 2007, 11:06
maxter
Есть динамический список адресов,которые надо последовательно загружать в WebBrowser, обрабатывать содержимое страницы, и загружать следующую. Проблема в том,что надо остановить выполнение цикла,пока страница не загрузилась. Я так понимаю,надо проверять NavigateComplete2. Подскажите,как это сделать. Заранее спасибо.
Re: WebBrowser и OnNavigateComplete2: как проверить загрузку страницы в цикле
Добавлено: 19 ноя 2007, 11:50
Duncon
Я в свое время не нашел достойного решения этой проблемы

Решал через таймер..
Re: WebBrowser и OnNavigateComplete2: как проверить загрузку страницы в цикле
Добавлено: 19 ноя 2007, 12:14
maxter
Duncon писал(а):Я в свое время не нашел достойного решения этой проблемы

Решал через таймер..
Я тоже пытаюсь через таймер,но вариант не очень получается
Re: WebBrowser и OnNavigateComplete2: как проверить загрузку страницы в цикле
Добавлено: 19 ноя 2007, 12:49
Duncon
Получается, вопрос в скорости коннекта и лагов соответственно.
Re: WebBrowser и OnNavigateComplete2: как проверить загрузку страницы в цикле
Добавлено: 20 ноя 2007, 14:23
Blood_Magic
ребятишки, все делается намного проще, какие таймеры, вы о чем
Re: WebBrowser и OnNavigateComplete2: как проверить загрузку страницы в цикле
Добавлено: 20 ноя 2007, 14:39
Blood_Magic
Код: Выделить всё
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
private
{ Private declarations }
index:integer;
procedure CheckContent(const pDisp: IDispatch);
public
{ Public declarations }
procedure NextPage;
end;
var
Form1: TForm1;
implementation
uses
mshtml, ActiveX;
var
ls:TStringList;
{$R *.DFM}
function GetHTML(iDoc:IHtmlDocument2):string;
var
str:TStringStream;
begin
str:=TStringStream.Create('');
try
(iDoc as IPersistStreamInit).Save(TStreamAdapter.Create(str),True);
Result:=str.DataString;
finally
str.Free;
end;
end;
procedure TForm1.CheckContent(const pDisp: IDispatch);
var
iDoc:IHtmlDocument2;
html:string;
begin
If not assigned(pDisp) then Exit;
If not assigned((pDisp as IWebBrowser).Document) then Exit;
(pDisp as IWebBrowser).Document.QueryInterface(IHtmlDocument2,iDoc);
If not assigned(iDoc) then Exit;
html:=GetHTML(iDoc);
end;
procedure TForm1.NextPage;
begin
if index<ls.Count then WebBrowser1.Navigate(ls.Strings[index]);
Inc(index);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
index:=0;
NextPage;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ls:=TStringList.Create;
//Список url
ls.Add('www.ya.ru');
ls.Add('www.r0.ru');
ls.Add('www.google.ru');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ls.Free;
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
CheckContent(pDisp);
NextPage;
end;
end.