- ベストアンサー
vb2005 webbrowserでリンクをクリックした後の表示待ちの方法
- VB2005を勉強中の方が、WebBrowserコントロールを使用してリンクをクリックした後の表示待ちの方法について質問しています。
- WebBrowser1.Navigateメソッドを使用してページを開いた場合、表示待ち部分が機能することが確認されていますが、InvokeMemberメソッドを使用してリンクをクリックした後では表示待ちがうまく機能しないため、問題点を解決したいとのことです。
- 質問者はWebBrowser1.Document.GetElementsByTagNameを使用して特定のリンクをクリックし、その後の表示待ちがうまく機能しない問題に直面しています。解決策を求めています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
同様の問題で私も今先ほどまでうなっていました。 Webbrowser1.Navigaterの後、即座にWebbrowser1.Document.ReadyStateが非completeになるわけではないようです。 つまり、あなたのソースコードの3行目のWhileは、あなたが期待しているNavigateの結果によるcompleteではなく、Navigate以前の表示状態のcompleteだという事です。 詳しい事を確かめたわけではありませんが、WebBrowserコントロールは非同期ですので、Navigate後即座に反応するのではなく、WebBrowserコントロールのプロセス?が実際に実行されるまでにタイムラグがあるらしいのです。 多分そうだと思います。 1、completeである限りループ(タイムアウトは次へ、タイムアウト時間は任意) 2、非completeである限りループ とすれば良いと思います。 タイムアウトが必要なのは、Navigateがあなたの思う度折の即座の反応をし、さらに表示も俊足で終わるという状況(ありえないでしょうが、そうなった 場合ループから脱出しないので)のため必要かと思います。 いかがでしょうか。 内容に自信はありませんが、私の場合それでさっき動きましたから。
その他の回答 (1)
- mo_gu
- ベストアンサー率51% (56/109)
WebBrowser1_DocumentCompletedで TextBox1.Text = WebBrowser1.Document.Body.InnerText これをやるのはだめなんでしょうか?
お礼
お詫び Navigate("https://yahoo.co.jp") ↓ Navigate("http://yahoo.co.jp") に訂正します。 ご回答ありがとうございます。 説明不足で申し訳ありません。若干処理方法の違う似たようなプロシージャが複数あり、それぞれページ表示後に個別の処理対応をさせたいので、1つのプロシージャ内で解決させる方法を考えている次第です。 お力添えお待ちしてます!
お礼
ご返答ありがとうございます。 下記の方法のご提案ありがとうございます。 1、completeである限りループ(タイムアウトは次へ、タイムアウト時間は任意) 2、非completeである限りループ 実は数ヶ月前に私もなにか強引な方法でもいいから手はないかなぁとおもって、下記の方法で一時しのぎをしておりました。 1、クリック前のWEBテキストをtextboxに表示 2、InvokeMember("click") 3、WEBテキストをtextboxに再表示 4、textboxの内容が切り替わりきるまでループ 上記の方法はtextboxでの切り替わりの最中の内容がまっさらになった状態で一旦NULLエラー?見たいなのが出るのでtry catchもはさむ必要があったりとちょっと面倒だったのでご提案いただいた方法も試みてみます。 ありがとうございました!