WebBrowserで読み込まれるまで待機


webo  2004-11-17 08:20:35  No: 11788

やりたい事:
a〜zの文字列の格納された配列を用意する。
WebBrowserコントロールに、配列a〜zの文字列をURLの文字列として含ませながら1つづつ巡回してページデータを取得する。http://a.com  → http://b.com  → http://c.com.......の様にzまで続く
一つのページが読み込み完了したら次の文字に移る。

簡単に言うと自動で複数のサイトを巡回して、データ収集を行わせる物を作りたいのです。

現状できている事:
WebBrowserコントロールに任意のページを表示させる。
WebBrowserコントロールのComplateイベントの取得後データの収集を行う。

できていない事:
読み込み完了まで処理を待機し、読み込みが終わったら次のURLを読みに行く。

という事です。
Delphiの質問というより、プログラムの考え方の質問のようになってしまいましたが、わかる方  いらっしゃいましたら  よろしくお願いします


つっか  2004-11-17 14:55:01  No: 11789

試してませんけど

http://www.swissdelphicenter.ch/en/showcode.php?id=1096

などを見ると

  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
   Application.ProcessMessages;

なコードで待っているようです。ここには TWebBorwser 関係の Tips が
50以上もあって参考になります。

> 簡単に言うと自動で複数のサイトを巡回して、データ収集を行わせる物を作りたいのです。

うーむ、なぜ TWebBorwser をつかうんでしょうか。TWebBrowser はその名前の
とおりページを表示して閲覧するためのものです。HTML の文書内容がほしければ
D5 では TNMHTTP コンポをつかいますし、D6 以降なら Indy にもっと適当な
コンポがあるはずですけど。


今日は収集日  2004-11-17 16:03:26  No: 11790

> 簡単に言うと自動で複数のサイトを巡回して、データ収集を行わせる物を作りたいのです。

複数のサイトを目で見て確認しながら巡回して データ収集したいのなら、WebBrowserコントロールの DocumentComplateイベントの発生を待つ必要がありますね。

var
  bDocComplete: Boolean;
  ArrayURL: array[0..20]of string;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  WebBrowser1.Silent := True;
  for i := Low(ArrayURL) to High(ArrayURL) do begin
    bDocComplete := False;
    WebBrowser1.Navigate(ArrayURL[i], EmptyParam, EmptyParam, EmptyParam, EmptyParam);
    while not bDocComplete do Application.ProcessMessages;
  end;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  bDocComplete := True;
  // データ収集の処理
end;


迷宮入り中  2004-11-17 20:37:58  No: 11791

やりたいことが間違っていたらすみません。

WebBrowserコンポーネントを使用しているのであれば、
OnProgressChangeイベントで読み込みが完了したか確認したらどうですか。

どうでしょう?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加