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

わんくま同盟

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

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

ツリー一括表示

C# webBrowser.Navigate後のボタンクリッ /びぎなー青ドンちゃん (18/10/03(Wed) 17:31) #88833
Re[1]: C# webBrowser.Navigate後のボタンクリッ /WebSurfer (18/10/03(Wed) 19:59) #88835
  └ Re[2]: C# webBrowser.Navigate後のボタンクリッ /びぎなー青ドンちゃん (18/10/03(Wed) 22:01) #88836
    └ Re[3]: C# webBrowser.Navigate後のボタンクリッ /WebSurfer (18/10/03(Wed) 22:41) #88839
      └ Re[4]: C# webBrowser.Navigate後のボタンクリッ /びぎなー青ドンちゃん (18/10/04(Thu) 15:15) #88847 解決済み
        └ Re[5]: C# webBrowser.Navigate後のボタンクリッ /WebSurfer (18/10/04(Thu) 15:44) #88848 解決済み


親記事 / ▼[ 88835 ]
■88833 / 親階層)  C# webBrowser.Navigate後のボタンクリッ
□投稿者/ びぎなー青ドンちゃん (4回)-(2018/10/03(Wed) 17:31:58)

分類:[.NET 全般] 


分類:[.NET 全般] 
環境:Windows 10
   Visula Studio 2017
   C#

いつもお世話になっております。

C#のWebBrowser コントロールを使用し
WEBの巡回ツールのような物を作っています。

webBrowser.Navigateで目的にページへ遷移した後
そのページにあるボタンを押すまでは実装できたのですが
ボタンクリックまで1.8秒程かかってしまいます。

以下のようなコードを実装しました。

//-----------------------------------------
//-----------------------------------------
webBrowser1.Navigate("http://〇〇〇/△△△/□□□");

//目的ページへの遷移完了を待つ処理
do
{
Application.DoEvents();

}
while (webBrowser1.IsBusy ||
webBrowser1.ReadyState != WebBrowserReadyState.Complete ||
webBrowser1.Document.Body.InnerHtml == null
);

HtmlElementCollection forms = webBrowser1.Document.GetElementsByTagName("form");
forms[0].InvokeMember("submit");
//-----------------------------------------
//-----------------------------------------


webBrowser1.Navigateからsubmitまで時間短縮するよい方法はありますでしょうか。


本サイトの過去記事で
「速くしたいなら、やっぱり WebBrowser を利用しないのが一番」というコメントも拝見しました。

C#で「WebBrowser を利用しない」で上記のような目的ページ遷移後にボタンを押す動作をさせる
何かよい方法もございましたらご教示頂きたく。

C#について勉強中につき質問内容が初心者で申し訳ございませんが
お力添え頂きたく宜しくお願いいたします。



[ □ Tree ] 返信 編集キー/

▲[ 88833 ] / ▼[ 88836 ]
■88835 / 1階層)  Re[1]: C# webBrowser.Navigate後のボタンクリッ
□投稿者/ WebSurfer (1616回)-(2018/10/03(Wed) 19:59:37)
No88833 (びぎなー青ドンちゃん さん) に返信

何に時間がかかっているか(どこがボトルネックか)を把握できてないですよね?

たぶん、1.8 秒の内ほとんどが要求が出て、応答が返ってきて、WebBrowser で応答の読み込みが
終了するまでに費やされているのではないでしょうか?

Fiddler などのキャプチャツールを使って調べてみてください。
[ 親 88833 / □ Tree ] 返信 編集キー/

▲[ 88835 ] / ▼[ 88839 ]
■88836 / 2階層)  Re[2]: C# webBrowser.Navigate後のボタンクリッ
□投稿者/ びぎなー青ドンちゃん (6回)-(2018/10/03(Wed) 22:01:12)
WebSurfer様

お答え頂きありがとうございます。
ご指摘のとおり何に時間がかかっているかわかっておりません。

WebBrowserReadyState.Complete待ちが悪いのではないかと考えておりました。

WebBrowserの読み込みが完了しないと
遷移後のページでsubmitできないのでしょうか。

※読み込み中にsubmitできないのでしょうか。


> Fiddler などのキャプチャツールを使って調べてみてください。

ありがとうございます。ご教示頂きましたツールを使用してみます。

まずはお礼まで。



[ 親 88833 / □ Tree ] 返信 編集キー/

▲[ 88836 ] / ▼[ 88847 ]
■88839 / 3階層)  Re[3]: C# webBrowser.Navigate後のボタンクリッ
□投稿者/ WebSurfer (1617回)-(2018/10/03(Wed) 22:41:20)
No88836 (びぎなー青ドンちゃん さん) に返信

> WebBrowserの読み込みが完了しないと
> 遷移後のページでsubmitできないのでしょうか。

読み込みが完了しないと form オブジェクト(form[0])は取得できないと思います。
取得できなければ forms[0].InvokeMember("submit"); で submit はできないという
ことになるはずです。

一度、試しに WebBrowser.DocumentCompleted イベントを利用して、そのハンドラで
処置してみてはいかがですか? 速くなるのは期待薄かもしれませんが、物は試しと
いうことで。

速くならなくても、Application.DoEvents(); をループに入れて実行するのは止めた
方がよさそうな気がしますし。
[ 親 88833 / □ Tree ] 返信 編集キー/

▲[ 88839 ] / ▼[ 88848 ]
■88847 / 4階層)  Re[4]: C# webBrowser.Navigate後のボタンクリッ
□投稿者/ びぎなー青ドンちゃん (7回)-(2018/10/04(Thu) 15:15:36)
WebSurfer様

ご回答頂き誠にありがとうございます。
読み込み中submitできない件、承知しました。


【結果】
ご教示頂きました「WebBrowser.DocumentCompleted イベント」をトリガーにして
submitしてみたところ0.5秒ほどはやくなりました。



【問題点】
現在、WebBrowser.DocumentCompletedイベントが数回発生してしまい
タイミング次第でsubmitできない場合がありました。



【その他】
WebBrowserのReadyState がInteractiveの状態等でsubmitを実行してみました。
forms[0].InvokeMember("submit")で特にプログラム上の例外エラーにはならないものの
期待する動作になりませんでした。

ご指摘のApplication.DoEventsは入れないように致しました。
ありがとうございます。
過去にApplication.DoEventsを使用し
適切でない箇所にApplication.DoEventsが入っていたため
フリーズが発生する現象を経験しております(汗



その他いろいろ試してみたいと思います。
お忙しい中ご回答頂きありがとうございました。








解決済み
[ 親 88833 / □ Tree ] 返信 編集キー/

▲[ 88847 ] / 返信無し
■88848 / 5階層)  Re[5]: C# webBrowser.Navigate後のボタンクリッ
□投稿者/ WebSurfer (1618回)-(2018/10/04(Thu) 15:44:14)
No88847 (びぎなー青ドンちゃん さん) に返信

> 【問題点】
> 現在、WebBrowser.DocumentCompletedイベントが数回発生してしまい
> タイミング次第でsubmitできない場合がありました。

複数の frame を使っていたり、親ページの中で iframe を使っていたりすると DocumentCompleted イベントが
複数回発生します。たぶんその影響だと思います。
解決済み
[ 親 88833 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -