やりたい事:
a〜zの文字列の格納された配列を用意する。
WebBrowserコントロールに、配列a〜zの文字列をURLの文字列として含ませながら1つづつ巡回してページデータを取得する。http://a.com → http://b.com → http://c.com.......の様にzまで続く。
一つのページが読み込み完了したら次の文字に移る。
簡単に言うと自動で複数のサイトを巡回して、データ収集を行わせる物を作りたいのです。
現状できている事:
WebBrowserコントロールに任意のページを表示させる。
WebBrowserコントロールのComplateイベントの取得後データの収集を行う。
できていない事:
読み込み完了まで処理を待機し、読み込みが終わったら次のURLを読みに行く。
という事です。
Delphiの質問というより、プログラムの考え方の質問のようになってしまいましたが、わかる方 いらっしゃいましたら よろしくお願いします
試してませんけど
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 にもっと適当な
コンポがあるはずですけど。
> 簡単に言うと自動で複数のサイトを巡回して、データ収集を行わせる物を作りたいのです。
複数のサイトを目で見て確認しながら巡回して データ収集したいのなら、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;
やりたいことが間違っていたらすみません。
WebBrowserコンポーネントを使用しているのであれば、
OnProgressChangeイベントで読み込みが完了したか確認したらどうですか。
どうでしょう?
ツイート | ![]() |