tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
WebBrowserを使ってWeb上のTextBoxや各種ボタン等の操作例(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2013/01/20 09:12
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[インターネット][][]                                                *
* キーワード:ログイン,自動的に,IE,ボタンをクリック,テキスト入力,submit,         *
***********************************************************************************
'==================================================================================
'投 稿 日:2012.02.04
'投 稿 者:VBレスキュー(花ちゃん)
'タイトル:WebBrowserを使ってWeb上のTextBoxや各種ボタン等の操作例(434)
'動作確認:WindowsVista / Windows 7 / VB2005 / VB2008 / VB2010 / IE 9.0
'[Option Compare Text][Option Explicit On][Option Infer On][Option Strict On]で設定
'VB6.0用を投稿しましたので、VB2005〜用も作成し、投稿しました。
'==================================================================================
'----------------------------------------------------------------------------------
※ 使用コントロール及び貼り付け位置等は下図の実行結果図を参考にお好みで。
  (一旦現状のままで、動作確認をしてから改造するなり修正するなりしてお使い下さい)
  (尚、満足に動作しないと言う事なら、当サイトの掲示板の方に質問願います。)
   読み込み待ち設定を行っておりませんので、完全に表示されてから実行して下さい。
'----------------------------------------------------------------------------------
   下記の WebBrowserを使ってのHTMファイル内の全ての要素を調査(VB.NET) と
  合わせてご使用下さい。
  http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=313
  又、コメントや注意書きをよく読んでご使用下さい。変に書き換えたりすると
  動作しないし、エラーが発生する事になります。
  必ず、指定のサイトでお試し下さい。他のサイトではそのままでは動作しません。


Public Class Form1

Private Sub Button2_Click(sender As System.Object, e As System.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

Private Sub Button3_Click(sender As System.Object, e As System.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")

   'このように書く事もできます(WEBページが変更されと変わってしまう)
   WebBrowser1.Document.Forms.Item(1).All.Item(6).InvokeMember("click")

   '本来は、前もってどのような物が存在するか調べておいてから操作するので
   '上記のような方法でもいいのですが、書き換えて変更され見つからない場合も
   'あるので実装時にはエラーチェックをつけて下さい。
   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

Private Sub Button4_Click(sender As System.Object, e As System.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

Private Sub Button5_Click(sender As System.Object, e As System.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

Private Sub Button6_Click(sender As System.Object, e As System.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
      elem.SetAttribute("Checked", "")
   End If
End Sub

Private Sub Button7_Click(sender As System.Object, e As System.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

Private Sub Button8_Click(sender As System.Object, e As System.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

Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click
'8.送信ボタンのクリック での送信ボタン【type="submit"】の操作例
   'こちらの submit ボタンは以下のようにしてクリックできる
   WebBrowser1.Document.Forms(7).InvokeMember("submit")
End Sub

Private Sub Button10_Click(sender As System.Object, e As System.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

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

Private Sub Button12_Click(sender As System.Object, e As System.EventArgs) Handles Button12.Click
'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


Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
   'テスト用の WEB ページ を表示(変更すると動作しません。)
   WebBrowser1.Navigate("http://www.hanatyan.sakura.ne.jp/testfile1.htm")
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
'テストページを表示
   'テスト用の WEB ページ を表示(変更すると動作しません。)
   WebBrowser1.Navigate("http://www.hanatyan.sakura.ne.jp/testfile1.htm")
End Sub

End Class

実行結果図(画像をクリックすると元のサイズで見る事ができます。)



 [スレッド一覧へ] [親スレッドへ]