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

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

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

Re[6]: documentCompleted内の書き方(自動巡回時)


(過去ログ 111 を表示中)

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

■65773 / inTopicNo.1)  documentCompleted内の書き方(自動巡回時)
  
□投稿者/ 中野 (1回)-(2013/03/17(Sun) 19:46:33)

分類:[C#] 

はじめまして。宜しくお願い致します。

C#のwebbrowserでnavigateした後、documentCompletedでnavigate先のページ読み込みの完了を
感知すると思いますが、自動で複数URLを巡回させる場合は
documentCompleted内にどの様に記述するのがベストでしょうか?


例えば、button1をクリックすると
Yahoo→Google→goo
と自動で巡回していくとします。

現在は、以下の様に書いています。

-------------------------------------------------------------------------
int current_status = 0 //現在の状態

private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("http://yahoo.co.jp");
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
 current_status++;

switch(current_status) {
case 1:
webBrowser1.Navigate("http://google.co.jp");
break;
case 2:
webBrowser1.Navigate("http://goo.ne.jp");
break;
}
}
-------------------------------------------------------------------------



しかし、画面が増えるごとにcaseで増やしていくのが
結構煩雑で何かもっとすっきりできないかと考えたり調べたり
していますがどうもしっくりきません。

ちなみに、
Application.DoEvents();を使ってループさせて待機する関数wait()を作り、

webBrowser1.Navigate("http://yahoo.co.jp");
wait();
webBrowser1.Navigate("http://google.co.jp");
wait();
webBrowser1.Navigate("http://goo.ne.jp");
wait();

とするとすっきりしますが、できればDocumentCompleted
で読み込み完了を判断したいと思っています。


どなたかアドバイス頂けたら幸いです。
宜しくお願い致します。
引用返信 編集キー/
■65774 / inTopicNo.2)  Re[1]: documentCompleted内の書き方(自動巡回時)
□投稿者/ websurfer (3回)-(2013/03/17(Sun) 21:05:08)
No65773 (中野 さん) に返信
> はじめまして。宜しくお願い致します。
>
> C#のwebbrowserでnavigateした後、documentCompletedでnavigate先のページ読み込みの完了を
> 感知すると思いますが、自動で複数URLを巡回させる場合は

以下のページが参考になりませんか?

WebBrowserのウエイト
http://social.msdn.microsoft.com/Forums/en-US/vbexpressja/thread/fa0e8e02-316d-4176-99f9-4b8adc981904
引用返信 編集キー/
■65775 / inTopicNo.3)  Re[2]: documentCompleted内の書き方(自動巡回時)
□投稿者/ 中野 (2回)-(2013/03/17(Sun) 23:17:49)
2013/03/17(Sun) 23:21:04 編集(投稿者)

No65774 (websurfer さん) に返信


websurferさん、ご回答頂きましてありがとうございます。

ご紹介いただいたページを拝見させていただきました。


ちょっと書き忘れていたことがありまして・・・すみません。。。

私のプログラムの場合は巡回の途中に処理が入ってきます。

Yahooに行く→DOMを解析してニュース項目をテキストに保存→googleに行って検索窓にabcと打ち込み、検索ボタンをクリック
のように、間にテキスト解析やフォームへの入力・ボタンのクリックなどの処理が入ります。

ご紹介いただいたページの処理はuriList(currentIndex)のようにリストにURLを保持して
ありましたが、これを保持せずに


webBrowser1.Navigate("http://yahoo.co.jp");
wait();
yahooでの処理(テキスト解析・フォームへの入力・ボタンのクリック)

webBrowser1.Navigate("http://google.co.jp");
wait();
googleでの処理

webBrowser1.Navigate("http://goo.ne.jp");
wait();
gooでの処理

のように、ソースコードを上から一目で見て流れが確認できるような形にしたいです。


URLリスト保持せず、巡回途中の処理までをも行おうとすると
どのイベントを使うにしてもイベントハンドラ内でのswitch分岐は避けられないでしょうか?

引用返信 編集キー/
■65783 / inTopicNo.4)  Re[3]: documentCompleted内の書き方(自動巡回時)
□投稿者/ uma (1回)-(2013/03/18(Mon) 12:50:10)
> webBrowser1.Navigate("http://yahoo.co.jp");
> wait();
> yahooでの処理(テキスト解析・フォームへの入力・ボタンのクリック)
>
> webBrowser1.Navigate("http://google.co.jp");
> wait();
> googleでの処理
>
> webBrowser1.Navigate("http://goo.ne.jp");
> wait();
> gooでの処理
>
> のように、ソースコードを上から一目で見て流れが確認できるような形にしたいです。

Application.DoEvents()を使えば上のようなことは可能ですが、Application.DoEvents()を使用したくない場合は
上のようなことの実現はあきらめた方がいいでしょう。

urlリストではなく、urlと各サイトでの処理のデリゲートを持つクラス(またはKeyValuePair)のリストを使えば
まだすっきりとするような気がします。
引用返信 編集キー/
■65797 / inTopicNo.5)  Re[4]: documentCompleted内の書き方(自動巡回時)
□投稿者/ WebSurfer (11回)-(2013/03/18(Mon) 20:13:10)
No65773 (中野 さん) に返信
> Yahooに行く→DOMを解析してニュース項目をテキストに保存→
> googleに行って検索窓にabcと打ち込み、検索ボタンをクリック
> のように、間にテキスト解析やフォームへの入力・ボタンのク
> リックなどの処理が入ります。

何をするつもりかわかりませんが、検索情報がほしいのであれば、全面的にやり方を見直す必要があると思います。

少なくとも Google は検索後の情報を WebBrowser オブジェクトから取得できないはずです。

Webページの内容を取得
http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/82b7de61-8e6d-4d1e-a96f-bd8c0cbe3b61

上に紹介したページに書いてあるように、Custom Search API を使い検索結果のデータを取得する必要があるはずです。

Yahoo!, goo は調べてませんが、同様ではないかと思います。

> URLリスト保持せず、巡回途中の処理までをも行おうとすると
> どのイベントを使うにしてもイベントハンドラ内でのswitch
> 分岐は避けられないでしょうか?

各 URL で処置が違うなら、DocumentComplete イベントのハンドラでURL によって処置を分けるほか手はないと思います。

URLリストを保持する/保持しないは問題の本質とは関係なくて、単にコーディングのやり方の問題と思いますが。

何にせよ、Application.DoEvents メソッドをループに入れて使うのは自ら問題の種をまくようなことなので、止めた方がいいと思います。

引用返信 編集キー/
■65800 / inTopicNo.6)  Re[5]: documentCompleted内の書き方(自動巡回時)
□投稿者/ 中野 (3回)-(2013/03/18(Mon) 22:11:43)
>umaさん

ご回答ありがとうございます。

urlと各サイトでの処理のデリゲートを持つクラス(またはKeyValuePair)のリストを使うのですね。
なるほどですね、勉強になります。
ありがとうございました。


>WebSurferさん

処理内容は例として挙げたのですが、googleの件は知りませんでした。
参考にさせていただきます。

Application.DoEvents メソッドを使用しない場合ですっきりさせる場合は
やはりイベントハンドラ内で処理を分けるしかないのですね。

ご回答ありがとうございました。
引用返信 編集キー/
■65827 / inTopicNo.7)  Re[6]: documentCompleted内の書き方(自動巡回時)
□投稿者/ 中野 (4回)-(2013/03/19(Tue) 22:29:14)
No65800 (中野 さん) に返信
> >umaさん
>
> ご回答ありがとうございます。
>
> urlと各サイトでの処理のデリゲートを持つクラス(またはKeyValuePair)のリストを使うのですね。
> なるほどですね、勉強になります。
> ありがとうございました。
>
>
> >WebSurferさん
>
> 処理内容は例として挙げたのですが、googleの件は知りませんでした。
> 参考にさせていただきます。
>
> Application.DoEvents メソッドを使用しない場合ですっきりさせる場合は
> やはりイベントハンドラ内で処理を分けるしかないのですね。
>
> ご回答ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -