3.WebBrowserを使ってのTextBoxや各種ボタン等要素の操作例(08_Int_03) (旧、SampleNo.434) |
下記プログラムコードに関する補足・注意事項 動作確認:動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 / Internet Explorer 11.0 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:追加なし 使用コン:Button1 〜 Button11 / WebBrowser1 / トロール:事前にテストサイドの要素名等を調査し、サイトを表示状態にしておいてから実行して下さい。 このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.起動時の処理及びテスト用の WEB ページを表示 |
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 'テストページを表示 'テスト用の WEB ページ を表示(変更すると動作しません。) WebBrowser1.Navigate("http://hanatyan.sakura.ne.jp/testfile1.htm") End Sub |
2.ボタンの操作色々その1(1.ボタンのクリック操作(その1)を実行する) |
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '1.ボタンのクリック操作(その1) のボタン【type="button"】を操作する '要素名とボタンの表面の文字とでどのボタンかを特定する場合 Dim elem As HtmlElement For Each elem In WebBrowser1.Document.GetElementsByTagName("input") '要素=input の value 属性の値を調べる If elem.GetAttribute("value") = "水色" Then elem.InvokeMember("Click") ' End If Next MessageBox.Show("背景を赤色にします。") '要素名とボタン名で特定して操作する場合 WebBrowser1.Document.GetElementsByTagName("input").Item("btnred").InvokeMember("Click") MessageBox.Show("背景をみどりにします。") '特に特定できるものがない場合 WebBrowser1.Document.GetElementsByTagName("input").Item(2).InvokeMember("Click") MessageBox.Show("背景を白色にします。") 'ID で特定して操作する場合(最初に見つかった1個だけを格納する) WebBrowser1.Document.GetElementById("btn_white").InvokeMember("Click") End Sub |
3.ボタンの操作色々その2(2.ボタンのクリック操作(その2)を実行する) |
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '2.ボタンのクリック操作(その2)のボタン【type="submit" × type="button" ○】を操作する '注意 type="submit" となっているが本来の"submit" ボタンでは無い 'name だけで特定する場合(同じ name が複数見つかれば見つかった分だけ格納する) '同じnameが1個なら Item(0) を複数なら出現順の no を指定 WebBrowser1.Document.All.GetElementsByName("btn2").Item(0).InvokeMember("click") 'このように書く事もできます btn3 をクリック(WEBページが変更されと変わってしまう) WebBrowser1.Document.Forms.Item(1).All.Item(6).InvokeMember("click") '本来は、前もってどのような物が存在するか調べておいてから操作するので '上記のような方法でもいいのですが、書き換えて変更され見つからない場合も 'あるので実装時にはエラーチェックをつけて下さい。(下記は、btn1 なら OK) If WebBrowser1.Document.All.GetElementsByName("btn4").Count > 0 Then WebBrowser1.Document.All.GetElementsByName("btn4").Item(0).InvokeMember("click") End If 'この場合これでは何も動作しない WebBrowser1.Document.All.GetElementsByName("btn2").Item(0).InvokeMember("submit") End Sub |
4.テキストボックスへの読み書き(3.テキストボックスへの読み書き)を実行する) |
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click ' 3.テキストボックスへの読み書き でのテキストボックス【type="text"】の値を取得と書き込み Dim txt As String txt = WebBrowser1.Document.GetElementsByTagName("input").Item("textbox2").GetAttribute("value") MessageBox.Show("テキストボックスの内容は、" & txt & "です。") WebBrowser1.Document.GetElementsByTagName("input").Item("textbox2").SetAttribute("value", "書き換えました") End Sub |
5.オプションボタンの操作色々(4.オプションボタンの選択を実行する) |
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click '4.オプションボタンの選択 でのオプションボタン【type="radio"】の選択方法 Dim elem As HtmlElement 'Name rg1 で同じなので特定できないので For Each elem In WebBrowser1.Document.GetElementsByTagName("input") '操作したいチェックボックスを探す If elem.GetAttribute("value") = "op1" Then ' True と書きたいところだが "True" のように文字型でないとだめ '外す場合は、"False" かと思いきや "" を指定すればOK 'それならばと "hoge" と書いても OK だ! elem.SetAttribute("Checked", "hoge") '又は、下記でもok(既に、チェック済みでもチェックボックスの場合は、チェックが外れないので) ' elem.InvokeMember("Click") End If '現在の状態を調べる場合 If elem.GetAttribute("value") = "op1" Then MessageBox.Show("op1 は" & elem.GetAttribute("Checked") & " です。") 'これでチェックが外れます。 elem.SetAttribute("Checked", "") End If Next End Sub |
6.チェックボックスの操作(5.チェックボックスの選択を実行する) |
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '5.チェックボックスの選択 でのチェックボックスの【type="checkbox"】選択方法 '既にチェック済みならチェックが外れるので事前に確認の事 If WebBrowser1.Document.GetElementsByTagName("input").Item("ch1").GetAttribute("Checked") = "False" Then WebBrowser1.Document.GetElementsByTagName("input").Item("ch1").SetAttribute("Checked", "True") End If 'Name が一意なので下記でもOK Dim elem As HtmlElement = WebBrowser1.Document.All.GetElementsByName("ch3").Item(0) If elem.GetAttribute("Checked") = "False" Then '大文字でも小文字でもOK elem.SetAttribute("Checked", "True") 'オプションボタンの時と同様でOK MessageBox.Show("") elem.SetAttribute("Checked", "") End If End Sub |
7.リストボックスの操作(6.リストボックスの選択(その1)を実行する) |
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click '6.リストボックスの選択(その1)でのリストボックスの操作例 Dim elem As HtmlElement = Nothing For Each elem In WebBrowser1.Document.GetElementsByTagName("SELECT") 'Name=op_1 のリストボックスを選択 If elem.GetAttribute("NAME") = "op_1" Then 'VB6.0用掲示板を選択 elem.Children.Item(2).SetAttribute("Selected", "True hogeでもOK") 'イベントの発生が必要な場合下記のように設定 elem.RaiseEvent("onChange") '又は下記でもOK 'elem.InvokeMember("onChange") Exit For End If Next '下記のように特定できるならこのように書くこともできる 'WebBrowser1.Document.All.GetElementsByName("op_1").Item(0).SetAttribute("Selectedindex", "2") 'WebBrowser1.Document.All.GetElementsByName("op_1").Item(0).InvokeMember("onChange") End Sub |
8.リストボックスの操作(7.リストボックスの選択(その2)を実行する) |
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click '7.リストボックスの選択(その2)でのリストボックスの操作例 Dim elem As HtmlElement = Nothing For Each elem In WebBrowser1.Document.GetElementsByTagName("SELECT") 'listbox1 のリストボックスを選択 If elem.GetAttribute("NAME") = "listbox1" Then For i As Integer = 0 To elem.Children.Count - 1 If elem.Children.Item(i).GetAttribute("Selected") = "True" Then MessageBox.Show("ListBox で " & elem.Children.Item(i).InnerText & " = " & _ elem.Children.Item(i).GetAttribute("value") & " が選択されています") End If Next End If Next End Sub 図1.上記実行結果及び使用コントロール類と配置図 |
9.送信ボタン(submit)の操作(8.送信ボタンのクリックを実行する) |
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click '8.送信ボタンのクリック での送信ボタン【type="submit"】の操作例 'こちらの submit ボタンは以下のようにしてクリックできる WebBrowser1.Document.Forms(7).InvokeMember("submit") End Sub |
10.通常のリンクの操作(9.通常のリンクのクリックを実行する) |
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click '9.通常のリンクのクリック でのリンクのクリック例 Dim elem As HtmlElement = Nothing For Each elem In WebBrowser1.Document.GetElementsByTagName("A") '指定の A タグ内にある一意のものを指定する '最悪、href で URL を取得して照合する If elem.InnerText = "メニューへ移動" Then elem.InvokeMember("Click") 'クリックする Exit For End If Next End Sub |
11.画像のリンクの操作(10.画像のリンクのクリックを実行する) |
Private Sub Button11_Click(sender As System.Object, e As System.EventArgs) Handles Button11.Click '10.画像のリンクのクリック Dim elem As HtmlElement = Nothing For Each elem In WebBrowser1.Document.GetElementsByTagName("img") '指定の img 内にある一意のものを指定する '最悪、href で URL を取得して照合する If elem.GetAttribute("alt") = "玄関へお回り下さい" Then elem.InvokeMember("Click") 'あれば、そのイメージをクリック Exit For End If Next End Sub |
12.スクリプト関数の実行 |
Private Sub Button12_Click(sender As System.Object, e As System.EventArgs) Handles Button12.Click '11.スクリプト関数の実行 'HtmlDocument.InvokeScript メソッド の使用例 Dim obj0 As Object = "只今 InvokeScript の" & vbCrLf Dim obj1 As Object = "テスト中です" Dim objArray As [Object]() = New [Object](1) {obj0, obj1} WebBrowser1.Document.InvokeScript("test", objArray) End Sub |
13. |
14. |
15. |
16. |
17. |
18. |
検索キーワード及びサンプルコードの別名(機能名) |