C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: WebBrowerで次々とhtmlを読み込む処理方法について


(過去ログ 113 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■66988 / inTopicNo.1)  WebBrowerで次々とhtmlを読み込む処理方法について
  
□投稿者/ suffre (1回)-(2013/06/16(Sun) 10:42:49)

分類:[C#] 

C#でwebBrowserを使ってサイト巡回の処理を作っています。

DocumentCompletedイベントを指定しトリガーされると「読み込み終了」となるので次の処理をDocumentCompleted関数内に記述しています。

--------------------------------------------
private void button1_Click(object sender, EventArgs e){
 WebBrowser wb = webBrowser1;
 wb.Url = "http://example.com/aaa/";
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){
 textBox1.AppendText(wb.Document.GetElementById("id_aaa").InnerText);
 // 次の処理
}
--------------------------------------------

というふうに記述しています。

この「次の処理」のところで再び別のURLを指定した場合、またDocumentCompletedがイベントとして呼ばれるのでしょうか?つまり、

--------------------------------------------
private void button1_Click(object sender, EventArgs e){
 WebBrowser wb = webBrowser1;
 wb.Url = "http://example.com/aaa/";
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){
 // 次の処理
 WebBrowser wb = (WebBrowser)sender;
 wb.Url = "http://example.com/bbb/"; // ★
 textBox1.AppendText(wb.Document.GetElementById("id_aaa").InnerText);
}
--------------------------------------------

上記だと、★の行に来た時にwebBrowser1_DocumentCompletedがまた呼ばれることになるのでしょうか?
そうすると再び★の行に来てループしてしまうような…。

やりたいことは、一つ目のURLを読み込んで読み込み完了したらそのコンテンツを処理をし、次のURLを読み込んで読み込み完了したらそのコンテンツを完了・・・(以下同様に次のURL読み込み)・・・ということをやりたいのですが、
どのような処理を書けば良いのでしょうか?
上手な処理方法がわかりません。

すみませんがよろしくお願い致します。
引用返信 編集キー/
■66989 / inTopicNo.2)  Re[1]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ επιστημη (50回)-(2013/06/16(Sun) 11:10:41)
επιστημη さんの Web サイト
> この「次の処理」のところで再び別のURLを指定した場合、またDocumentCompletedがイベントとして呼ばれるのでしょうか?

いやそれは訊くまでもなく、やってみりゃわかるんちゃいますか?

> 上記だと、★の行に来た時にwebBrowser1_DocumentCompletedがまた呼ばれることになるのでしょうか?
> そうすると再び★の行に来てループしてしまうような…。

そんじゃ★ンとこのURLを取り換えればえぇですな。
URLを配列かなんかに並べておいて

string url[N];
int count = 0;

private void Webページ読み込み完了() {
  if ( count < N ) {
    ++count;
    url[count]を読めー!
  }
}

みたいな。

引用返信 編集キー/
■66990 / inTopicNo.3)  Re[1]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ Jitta (43回)-(2013/06/16(Sun) 13:10:32)
Jitta さんの Web サイト
No66988 (suffre さん) に返信

> やりたいことは、一つ目のURLを読み込んで読み込み完了したらそのコンテンツを処理をし、次のURLを読み込んで読み込み完了したらそのコンテンツを完了・・・(以下同様に次のURL読み込み)・・・ということをやりたいのですが、
> どのような処理を書けば良いのでしょうか?
> 上手な処理方法がわかりません。
>
> すみませんがよろしくお願い致します。

処理の前に仕様の確認が必要では?
人が読むのですか?内容をどこかに保存するのですか?
今のままだと、読んでる最中に次が表示されますよ?

# これ、あなたじゃないですか?
# http://bbs.wankuma.com/index.cgi?mode=al2&namber=66703
引用返信 編集キー/
■66992 / inTopicNo.4)  Re[2]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ suffre (2回)-(2013/06/16(Sun) 21:37:00)
書き方がマズかったですね・・・。やってみてループしたのでそう質問してしまいました。

で、カウントして処理を・・・というのは確かにそのとおりですね。

※ここからは本題ではないのですが、DocumentCompletedって一つのURLに対して呼ばれるのは
1回とは限らないので実際にはその方法だとなかなか実現は難しいです・・・。
カウントは1URLに対して1回しか呼ばれないという限定的な使い方では使えますので
回答してくださったことには感謝しております。

引用返信 編集キー/
■66994 / inTopicNo.5)  Re[2]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ suffre (3回)-(2013/06/16(Sun) 21:47:36)
> 処理の前に仕様の確認が必要では?
> 人が読むのですか?内容をどこかに保存するのですか?

URLを読み込んだら内容を処理をし、その処理が完了したら次のURLを読んで同様に処理をします。
人が読むことは想定していません。処理した内容を保存する場合もあれば次のURLの処理のために使う
値とする場合もあります。

> 今のままだと、読んでる最中に次が表示されますよ?

つまり読み込み終了時にDocumentCompletedが呼ばれるが、表示はそれより遅れるということでしょうか?
表示は遅れても構いません。

> # これ、あなたじゃないですか?
> # http://bbs.wankuma.com/index.cgi?mode=al2&namber=66703

その投稿は知りません。私は初めてこちらで投稿しました。

引用返信 編集キー/
■66995 / inTopicNo.6)  Re[3]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ ズッカ (1回)-(2013/06/16(Sun) 22:03:11)
> ※ここからは本題ではないのですが、DocumentCompletedって一つのURLに対して呼ばれるのは
> 1回とは限らないので実際にはその方法だとなかなか実現は難しいです・・・。

フレームやiframeなどを使っている場合、DocumentCompletedイベントは複数回呼ばれることがありますが、
それならば、DocumentCompletedの引数eのUrlプロパティとwebBrowser1.Urlの示すURLが同じ場合に処理をする
(それ以外は何もしない)ようにすればいいのではないでしょうか。

あと、本題のDocumentCompletedの発生についてですが、webBrowser1.Urlの示すURLを見て、
それがexample.com/aaa/だった場合とexample.com/bbb/だった場合とで処理を分岐すればいいのではないでしょうか。
(URLにQueryStringがつき、この内容が一定しない場合は工夫が必要ですが、基本的に上記の考え方でいけるのではないでしょうか)
引用返信 編集キー/
■66996 / inTopicNo.7)  Re[4]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ suffre (4回)-(2013/06/16(Sun) 22:26:25)
No66995 (ズッカ さん) に返信
> フレームやiframeなどを使っている場合、DocumentCompletedイベントは複数回呼ばれることがありますが、
> それならば、DocumentCompletedの引数eのUrlプロパティとwebBrowser1.Urlの示すURLが同じ場合に処理をする
> (それ以外は何もしない)ようにすればいいのではないでしょうか。
>
> あと、本題のDocumentCompletedの発生についてですが、webBrowser1.Urlの示すURLを見て、
> それがexample.com/aaa/だった場合とexample.com/bbb/だった場合とで処理を分岐すればいいのではないでしょうか。
> (URLにQueryStringがつき、この内容が一定しない場合は工夫が必要ですが、基本的に上記の考え方でいけるのではないでしょうか)

ありがとうございます。
やってみたところ、私が試しているサイトでは確かにDocumentCompletedの引数eのUrlプロパティとwebBrowser1.Urlが違ってしまいました。
でも基本的な方法としてはそのような感じで行けそうです。

なんとなくやり方がわかってきましたのでここから先が進めそうな気がしました。

引用返信 編集キー/
■67002 / inTopicNo.8)  Re[3]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ Jitta (44回)-(2013/06/17(Mon) 23:09:45)
Jitta さんの Web サイト
No66994 (suffre さん) に返信
>>今のままだと、読んでる最中に次が表示されますよ?
>
> つまり読み込み終了時にDocumentCompletedが呼ばれるが、表示はそれより遅れるということでしょうか?
> 表示は遅れても構いません。

 なんのために表示するのですか?人が読むためじゃないのですか?
読み込み終了と同時に次の URL を読み込みはじめたら、人が読み終わらないうちに次へいっちゃいますよ?


>># これ、あなたじゃないですか?
>># http://bbs.wankuma.com/index.cgi?mode=al2&namber=66703
>
> その投稿は知りません。私は初めてこちらで投稿しました。
>

 短期間のうちに同じようなことでの質問なので、同じ人かと思いました。
失礼しました。
引用返信 編集キー/
■67003 / inTopicNo.9)  Re[4]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ suffre (5回)-(2013/06/18(Tue) 01:24:34)
>  なんのために表示するのですか?人が読むためじゃないのですか?
> 読み込み終了と同時に次の URL を読み込みはじめたら、人が読み終わらないうちに次へいっちゃいますよ?

いえ、特に表示しなくてもいいんです。
今はいちおうURLの遷移がきちんと行なわれているかの確認のために表示させていますが
コンテンツを取得して処理さえできればいいので、読み込み終了と同時に次のURLを読み込んでOKなのです。

>  短期間のうちに同じようなことでの質問なので、同じ人かと思いました。
> 失礼しました。

いえ、大丈夫です。詳しくは読んでいませんが同じ内容なのですね。

引用返信 編集キー/
■67082 / inTopicNo.10)  Re[5]: WebBrowerで次々とhtmlを読み込む処理方法について
□投稿者/ suffre (6回)-(2013/07/01(Mon) 11:15:51)
皆様どうもありがとうございました。
これにて終了させて頂きます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -