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

***********************************************************************************
* カテゴリー:[インターネット][][]                                                *
* キーワード:ログイン,自動的に,IE,ボタンをクリック,テキスト入力,submit,         *
***********************************************************************************
'==================================================================
'投 稿 日:2012.01.14
'投 稿 者:VBレスキュー(花ちゃん)
'SampleNo:584    2012.01.13     @ 2012.01.13
'タイトル:WebBrowserを使ってWeb上のTextBoxや各種ボタン等の操作例(584)
'動作確認:Windows Vista / Windows 7 / VB6.0(SP6) IE 9.0 で確認
'最近この手の質問をよく見かけますのでテスト環境ともども投稿して見ました
'別途掲載のWebBrowserを使ってのHTMファイル内の全ての要素を調査(VB6.0)で
'調査しながら試して見て下さい。
'==================================================================

※ 使用コントロール及び貼り付け位置等は下図の実行結果図を参考にお好みで。
  又、下記以外の使用例は、今後追加するつもりです。
  質問等がありましたら、ここの [VB6.0用掲示板] の方にお願いします。
  
   下記の WebBrowserを使ってのHTMファイル内の全ての要素を調査(VB6.0) と
  合わせてご使用下さい。
  http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=310
  又、コメントや注意書きをよく読んでご使用下さい。変に書き換えたりすると
  動作しないし、エラーが発生する事になります。
  必ず、指定のサイトでお試し下さい。他のサイトではそのままでは動作しません。

Option Explicit

Private Sub Form_Load()
   'テスト用の WEB ページ を表示(変更すると動作しません。)
   WebBrowser1.Navigate "http://www.hanatyan.sakura.ne.jp/testfile1.htm"
End Sub

'基本的には、ID とか Name とか ボタンとかリンクの所に書かれている文字等で
'どの要素かを特定して、その要素に対して操作する事になります。
'従って、書かれている内容によって識別の方法が違うし操作も変わってきます。
'出来るだけ、変更されても影響を受けにくくて操作が簡単な方法を選んで下さい。
'ID → name → 表面等に書かれている文字 → 複数の条件の組み合わせ → 取得順
'ここでは、上記に関係なく色んな方法を試しておりますので、色々応用してみて
'下さい。

Private Sub Command1_Click()
'1.ボタン操作 水色をクリック
  
   'name が無いので番号で指定
'   WebBrowser1.Document.All.tags("input")(1).Click
  
   'Input タグ内を調査して
   '(タグが input でボタンの表面の文字が 水色 のものを特定する場合)
   Dim Element As Object, i As Long
   For Each Element In WebBrowser1.Document.All.tags("input")
      '前後に空白等が含まれている場合があるので注意
      If Element.Value = "水色" Then     '下記でもOK
    '  If Element.getAttribute("value") = "水色" Then
         Element.Click
         Exit For
      End If
   Next
   MsgBox "背景を白色に戻します。"
  
'ID で特定して操作する場合
   'ID が設定されている場合、下記のようにIDで特定して操作
   '通常、ID は一意のものだが稀に同じものが設定されている場合もある
   'その時は最初に見つかったものが格納される
   WebBrowser1.Document.getElementById("btn_white").Click

'★☆★☆★☆★ 余 談 ★☆★☆★☆★
'プロジェクト→参照設定 で Microsoft HTML Object Library に
'チェックを入れておいて
   Dim Doc As HTMLDocument
   Set Doc = WebBrowser1.Document
'   Doc. と書くとインテリセンス機能で使用できるメソッド等が表示されるので便利である
'   (逆に出てこない物を使用する事のないように。)
  
   Dim Element1 As MSHTML.IHTMLElementCollection   '← DispHTMLElementCollection
   Set Element1 = Doc.getElementsByName("btn1")
   Debug.Print TypeName(Element1)
   Dim Element2 As MSHTML.IHTMLInputElement
   Set Element2 = Element1.Item(0)
'   Element2.Click
   'のようにすれば、インテリセンスが働きどのようなキーワードがあるのか解る
  
   '使用する Element の タイプが解らない場合は
   Dim Element3 As Object
   Set Element3 = Element1.Item(0)
   Debug.Print TypeName(Element3)   'HTMLInputElement
   'のようにして調べる事ができます。
  
End Sub

Private Sub Command2_Click()
'2.ボタン操作 2をクリック
   'この場合同一Form内に submit がいくつもあるのと、Type=submitでも submit は使えない
   '(ソースコードが複数のsubmitに対応するように等、正しく書かれていない)
   'Google の検索サイトで[I'm Feeling Lucky]のボタンのクリックを試して見て下さい。

'  On Error Resume Next 'テスト用に
'   WebBrowser1.Document.Forms(1).submit                 'NG (action が設定されていないので無視される)
'   WebBrowser1.Document.Forms(1).submit.Click           '実行時エラー424
'   WebBrowser1.Document.Forms(1).Item(0).submit.Click   '実行時エラー428
'   WebBrowser1.Document.getElementsByName("btn2").Click

   'input タグ内の name が "btn2" で特定して操作する場合
   WebBrowser1.Document.All.tags("input").Item("btn2").Click   'OK
  
   'Forms(1) のようにどのForm 内に書かれて要素かを特定したい場合
   WebBrowser1.Document.Forms(1).Item(2).Click                 'OK
  
   'こちらは同じNameなら複数格納するので、Item(0) で最初に見つかった物を特定
   WebBrowser1.Document.getElementsByName("btn2").Item(0).Click
  
   '本来は、前もってどのような物が存在するか調べておいてから操作するので
   '上記のような方法でもいいのですが、書き換えて変更され見つからない場合も
   'あるので実装時にはエラーチェックをつけて下さい。
  
   If WebBrowser1.Document.getElementsByName("btn4").length > 0 Then
      '同じnameの物が複数存在する場合は、Item(1)のようにして識別して下さい。
      WebBrowser1.Document.getElementsByName("btn4").Item(0).Click
   End If
   '注意、下記ではエラーになります。(複数格納できないから)
   'If WebBrowser1.Document.getElementById("btn_white").length > 0 Then
  
'ちなみに、Google の検索サイトで[I'm Feeling Lucky]のボタンをクリックする場合は
'WebBrowser1.Document.Forms(0).Item("btnI").Click でクリックできます。(他に方法はあるかも)
'WebBrowser1.Document.Forms(0).submit では、検索ボタンのクリックになります。

End Sub

Private Sub Command3_Click()
'3.テキストボックスへの読み書き
   Dim txt As String
   txt = WebBrowser1.Document.All.tags("input").Item("textbox2").Value
   MsgBox "テキストボックスの内容は、" & txt & "です。"
   WebBrowser1.Document.All.tags("input").Item("textbox2").Value = "書き換えました"
  
  
   '下記のサイトのような同じ name のテキストボックスがあると上記のようなコードは
   '使えませんので、input タグ内の要素を検索して下さい。
   'https://www2.webpostman.ne.jp/wp/home

'   Dim Element As Object, i As Long
'   For Each Element In WebBrowser1.Document.All.tags("input")
'      '操作したいチェックボックスを探す
'      If Element.Type = "text" And Element.Name = "userId" Then
'         Element.Value = "ユーザーID"
'      End If
'      If Element.Type = "text" And Element.Name = "groupId" Then
'         Element.Value = "グループID"
'      End If
'      If Element.Type = "password" And Element.Name = "passwd" Then
'         Element.Value = "パスワード"
'      End If
'   Next
End Sub

Private Sub Command4_Click()
'テストページを表示
   'テスト用の WEB ページ を表示(変更すると動作しません。)
   WebBrowser1.Navigate "http://www.hanatyan.sakura.ne.jp/testfile1.htm"
End Sub

Private Sub Command5_Click()
'4.オプションボタンの選択
   Dim Element As Object, i As Long
   'Name rg1 で同じなので特定できないので
   For Each Element In WebBrowser1.Document.All.tags("input")
      '操作したいチェックボックスを探す
      If Element.Value = "op2" Then
         '既に、チェック済みでもチェックボックスの場合は、チェックが外れないので
         Element.Checked = True
         Debug.Print
         Exit For
      End If
      
      '現在の状態を調べる場合
      If Element.Value = "op1" Then
         MsgBox "op1 は" & Element.Checked & " です。"
      End If
   Next
End Sub

Private Sub Command6_Click()
'5.チェックボックスの選択
   Dim Element As Object, i As Long
   '既にチェック済みならチェックが外れるので事前に確認の事
   If WebBrowser1.Document.All.tags("input").Item("ch1").Checked = False Then
      WebBrowser1.Document.All.tags("input").Item("ch1").Checked = True
   End If
   'Name が一意なのでこのように簡略する事ができる
   If WebBrowser1.Document.All.tags("input").Item("ch3").Checked = False Then
      WebBrowser1.Document.All.tags("input").Item("ch3").Checked = True
   End If
End Sub

Private Sub Command7_Click()
'6.リストボックスの選択(その1)
   Dim Element As Object
   For Each Element In WebBrowser1.Document.All.tags("SELECT")
      'Name=op_1 のリストボックスを選択
      If Element.Name = "op_1" Then
         'VB6.0用掲示板を選択
         Element.Options(2).Selected = True
         'イベントの発生が必要な場合下記のように設定
         Call Element.FireEvent("onChange", "changeOrderChk();")
         Exit For
      End If
   Next
End Sub

Private Sub Command8_Click()
'7.リストボックスの選択(その2)
   Dim Element As Object, i As Long
   For Each Element In WebBrowser1.Document.All.tags("SELECT")
      If Element.Name = "listbox1" Then
         For i = 0 To Element.Options.length - 1
            If Element.Options(i).Selected = True Then
               '選択項目の値を取得
               MsgBox "ListBox で " & Element.Options(i).innerText & " = " & _
                       Element.Options(i).Value & " が選択されています"
            End If
         Next i
      End If
   Next
End Sub

Private Sub Command9_Click()
'8.送信ボタンのクリック
   'こちらの submit ボタンは以下のようにしてクリックできる
   WebBrowser1.Document.Forms(7).submit
End Sub

Private Sub Command10_Click()
'9.通常のリンクのクリック
   Dim Element As Object
   For Each Element In WebBrowser1.Document.All.tags("A")
      If Element.innerText = "メニューへ移動" Then
         Element.Click     'クリックする
         Exit For
      End If
   Next
End Sub

Private Sub Command11_Click()
'10.画像のリンクのクリック
   Dim Element As Object
   For Each Element In WebBrowser1.Document.All.tags("img")
      '指定の img 内にある一意のものを指定する
      If Element.alt = "玄関へお回り下さい" Then
         Element.Click  'あれば、そのイメージをクリック
         Exit For
      End If
   Next
End Sub

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



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