WebBrowser и OnNavigateComplete2: как проверить загрузку страницы в цикле

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
maxter
Сообщения: 10
Зарегистрирован: 27 апр 2007, 15:31

19 ноя 2007, 11:06

Есть динамический список адресов,которые надо последовательно загружать в WebBrowser, обрабатывать содержимое страницы, и загружать следующую. Проблема в том,что надо остановить выполнение цикла,пока страница не загрузилась. Я так понимаю,надо проверять NavigateComplete2. Подскажите,как это сделать. Заранее спасибо.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

19 ноя 2007, 11:50

Я в свое время не нашел достойного решения этой проблемы :(
Решал через таймер..
maxter
Сообщения: 10
Зарегистрирован: 27 апр 2007, 15:31

19 ноя 2007, 12:14

Duncon писал(а):Я в свое время не нашел достойного решения этой проблемы :(
Решал через таймер..
Я тоже пытаюсь через таймер,но вариант не очень получается
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

19 ноя 2007, 12:49

Получается, вопрос в скорости коннекта и лагов соответственно.
Blood_Magic
Сообщения: 268
Зарегистрирован: 30 июн 2005, 14:53

20 ноя 2007, 14:23

ребятишки, все делается намного проще, какие таймеры, вы о чем
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Blood_Magic
Сообщения: 268
Зарегистрирован: 30 июн 2005, 14:53

20 ноя 2007, 14:39

Код: Выделить всё

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.
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Ответить