『銀魂2 掟は破るためにこそある』がいよいよ公開!>>

VB2005を勉強中の者です。
WebBrowser1.Navigateを使ってwebページを開いた際は下記while文での表示待ちが機能するのですが、ページ表示後、さらにInvokeMemberを使って先のページにクリックで進んだ後では同一の表示待ち部分がうまく機能せずにそのまま次の処理へと進んでしまいいます。
どこに問題があるのか分からず困っております。どなたか助けていただけませんでしょうか?


WebBrowser1.Navigate("https://yahoo.co.jp")
'↓ここは機能します
While WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While

WebBrowser1.Document.GetElementsByTagName("a").Item(15).InvokeMember("click")
'↓これが機能しなくて困っています!
While WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
'↓目的
TextBox1.Text = WebBrowser1.Document.Body.InnerText

このQ&Aに関連する最新のQ&A

doevents」に関するQ&A: DoEventsは意味ない?

A 回答 (2件)

同様の問題で私も今先ほどまでうなっていました。



Webbrowser1.Navigaterの後、即座にWebbrowser1.Document.ReadyStateが非completeになるわけではないようです。
つまり、あなたのソースコードの3行目のWhileは、あなたが期待しているNavigateの結果によるcompleteではなく、Navigate以前の表示状態のcompleteだという事です。

詳しい事を確かめたわけではありませんが、WebBrowserコントロールは非同期ですので、Navigate後即座に反応するのではなく、WebBrowserコントロールのプロセス?が実際に実行されるまでにタイムラグがあるらしいのです。

多分そうだと思います。
1、completeである限りループ(タイムアウトは次へ、タイムアウト時間は任意)
2、非completeである限りループ
とすれば良いと思います。
タイムアウトが必要なのは、Navigateがあなたの思う度折の即座の反応をし、さらに表示も俊足で終わるという状況(ありえないでしょうが、そうなった 場合ループから脱出しないので)のため必要かと思います。

いかがでしょうか。
内容に自信はありませんが、私の場合それでさっき動きましたから。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
下記の方法のご提案ありがとうございます。

1、completeである限りループ(タイムアウトは次へ、タイムアウト時間は任意)
2、非completeである限りループ

実は数ヶ月前に私もなにか強引な方法でもいいから手はないかなぁとおもって、下記の方法で一時しのぎをしておりました。
1、クリック前のWEBテキストをtextboxに表示
2、InvokeMember("click")
3、WEBテキストをtextboxに再表示
4、textboxの内容が切り替わりきるまでループ

上記の方法はtextboxでの切り替わりの最中の内容がまっさらになった状態で一旦NULLエラー?見たいなのが出るのでtry catchもはさむ必要があったりとちょっと面倒だったのでご提案いただいた方法も試みてみます。
ありがとうございました!

お礼日時:2007/05/01 03:12

WebBrowser1_DocumentCompletedで


TextBox1.Text = WebBrowser1.Document.Body.InnerText
これをやるのはだめなんでしょうか?
    • good
    • 0
この回答へのお礼

お詫び
Navigate("https://yahoo.co.jp")

Navigate("http://yahoo.co.jp")
に訂正します。


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

説明不足で申し訳ありません。若干処理方法の違う似たようなプロシージャが複数あり、それぞれページ表示後に個別の処理対応をさせたいので、1つのプロシージャ内で解決させる方法を考えている次第です。
お力添えお待ちしてます!

お礼日時:2006/12/14 19:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング