
WebBrowserを使ってgoogle検索をVBで作ったブラウザ上で行いたいです。
具体的には、
「ComboBoxで選択した値」と「TextBoxで書き込んだキーワード」を
&検索したいのですが
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = ComboBox1.SelectedItem
WebBrowser1.Document.Forms(0).InvokeMember("submit")
End Sub
では、&検索ができません。常にコンボボックスで選択されたものだけが
検索され、しかも無限に検索をします。
対処法を教えていただけないでしょうか?
No.3ベストアンサー
- 回答日時:
ANo.1です。
DocumentCompletedは、ページが読み込まれるたびに呼ばれるルーチンですから・・・
個人的にはフラグを設定するだけで、別の終了待ちルーチンでループで待つってのを書くと思いますので、以下みたいです。
ついでにタイムアウトの場合も考えた方がいいと思います。
追加でbutton1が必要です。
Private isComplete As Boolean = False
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
isComplete = True
End Sub
Private Function waitCompleted() As Boolean
Do While Not isComplete = True
Application.DoEvents()
'タイムアウトチェック
'タイムアウトなら、
'MsgBox("タイムアウトです")
'WebBrowser1.Stop '現在のNavigateを中止するのはこれだったっけ?(自信なし)
'isComplete = False '一応チェック以降に終わったという場合に備えて
'Return False
Loop
isComplete = False '次に備えて
Return True
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WebBrowser1.Navigate("http://www.google.co.jp")
If waitCompleted() = False Then
Exit Sub
End If
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text & " " & ComboBox1.SelectedItem
WebBrowser1.Document.Forms(0).InvokeMember("submit")
waitCompleted()
End Sub
p.s.
ちなみに、こんなページがあるので、DocumentCompletedだけでチェックするのはまずいのかもしれない
http://dobon.net/vb/bbs/log3-26/15422.html
http://feedyomi.blog32.fc2.com/blog-entry-73.html
No.4
- 回答日時:
待機する理由がページを完全に読み込んでからでないと、
GetElementsByName("q")
などでフォームエレメントにアクセスできない、結果検索キーワードを
セットできない...という話であれば最初から Google に検索パラメータ
付きの URL を投げれば良いのでは?
DOM の解析(検索結果によって分岐させるなど)処理が続かないなら、
Http Request も少なくて済むし、効率的だと思いますが...
' // 要参照 System.Web(System.Web.dll) --> HttpUtility 使用のため
' // Google 設定
' // IDE に貼り付けると URL 記載部の前後が多少文字化けしますので
' // 修正して下さい
Private Const QRYURL As String = "http://www.google.com/search?q="
Private Const PARAMS As String = "&num=20&ie="
Private Const CHRSET As String = "UTF-8"
Private Sub Form1_Load( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Load
With Me.ComboBox1
.Items.Add("DocumentComplete MSDN")
.Items.Add("WebBrowser サンプル")
End With
End Sub
Private Sub ComboBox1_SelectedIndexChanged( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles ComboBox1.SelectedIndexChanged
Dim Enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(CHRSET)
Dim Kwd As String = ComboBox1.Text
If Kwd.Length > 0 Then
' // 検索キーワードを UrlEncode する
Kwd = System.Web.HttpUtility.UrlEncode(Kwd, Enc)
' // Google 問い合わせ
WebBrowser1.Navigate(QRYURL + Kwd + PARAMS + CHRSET)
End If
End Sub
ご参考までに。
# TextBox と ComboBox のキーワード連結の件は #1 ご回答で解決
# したようですから ComboBox のみに省略させてもらいました
No.2
- 回答日時:
DocumentComplatedでも構わないと思いますよ
ただ 検索するかどうかを判定すればいいだけです
現在の TextBoxとComboBoxの内容と WebBrowserのテキストボックスとを見比べて 違えばsumbitを実行
同じなら何もしないとしてやればいいでしょう
Dim sSearch
sSearch = TextBox1.Text & " " & ComboBOx1.SelectedItem
if WebBrowser.Document.All.GetElementByName("q")(0).innerText <> sSearch then
WebBrowser.Document.All.GetElementByName("q")(0).innerText = sSerarch
WebBrowser.Document.Forms(0).InvokeMember( "submit")
end if
といった具合です
この回答への補足
教えていただいた例では&検索はできるのですが、
やはり無限に検索をし、止まってくれません。
この場合、他のソースに問題があるのでしょうかね。
C言語で言うbreakみたいのがあればなぁとは思うのですが。
No.1
- 回答日時:
詳しくはわからないのですが・・・
>常にコンボボックスで選択されたものだけが検索され、
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = ComboBox1.SelectedItem
では、ComboBox1.SelectedItemだけが有効になってしまうので、
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text & " " & ComboBox1.SelectedItem
とかにしないといけないんじゃないかと思います。
>しかも無限に検索をします。
Private Sub WebBrowser1_DocumentCompleted
に、このコードがあれば、読み込みが終了->このコード->読み込み->読み込みが終了->このコード->・・・
という状態ではないでしょうか?
この回答への補足
>WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text & " " & ComboBox1.SelectedItem
まさにこれです。おかげで&検索ができました!ありがとうございます。
>Private Sub WebBrowser1_DocumentCompletedに、このコードがあれば、
なるほど!だから検索しまくっていたんですね。では、
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text & " " & ComboBox1.SelectedItem
をどこにおけば読み込みの無限ループは止まるのでしょうか?
よろしければご意見のほどをお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ニコニコ動画のある映像をクリ...
-
C#でDLLファイル読み込みを行う...
-
外部ファイルからのデータの読...
-
外部JPGを読み込んだ場合のロー...
-
IEの読み込み完了の取得
-
Xiaomiの楽天モバイルを使って...
-
プルダウンメニューとフェード...
-
flashを一度だけ再生するHTMLは...
-
ActionScriptに関しての質問
-
シェイプトゥイーンで離れた位...
-
ムービークリップの位置と角度...
-
FLASH MX フェードイン2
-
Flash Lite1.1について
-
#1009: null のオブジェクト参...
-
FLASH 文字を手書き風に出現さ...
-
Flash lite1.0で カウントダウン
-
【カウンタ画像表示】split?
-
フレーム付きページをお気に入...
-
フレーム内のオプションボタン...
-
CupCatの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GetPrivateProfileString変値
-
SQLが応答しなくなっているのか...
-
C#でDLLファイル読み込みを行う...
-
WebBrowserでgoogle検索するには?
-
メモリに読み込んだ音源のPlayS...
-
200ページ以上を1つのswfで制作...
-
2つのswfファイルをつなげてい...
-
外部ファイルからのデータの読...
-
IEを複数立ち上げていると勝...
-
VB.NET Windowsアプリケーショ...
-
ipadでdブックがとんでもなく遅...
-
再読み込みが可能なPDFビューワ...
-
動画ファイルから画像ファイル...
-
外部テキストの一行単位での読...
-
Now Loading+FLV_????? 教えて...
-
フレーム内のオプションボタン...
-
フレーム内に移動したい
-
phpで音を鳴らす
-
オプションボタンを矢印キーで...
-
Access2010でサブフォームのフ...
おすすめ情報