VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 インターネット・通信関係のメニュー
1.WebBrowserコントロールワンポイントテクニック集
2.WebBrowserを使ってのHTMファイル内の全ての要素を調査
3.WebBrowserを使ってのTextBoxや各種ボタン等要素の操作例
4.キーワードを URL エンコードして yahoo 及び google 検索
5.ちょっと便利なサイト内検索ソフト
6.
7.
8. 
9. 
10. 
11.
12.
 . 
20.その他、当サイト内に掲載のインターネット・通信に関するサンプル 


2.WebBrowserを使ってのHTMファイル内の全ての要素を調査(08_Int_02) (旧、SampleNo.433/SampleNo.257)
1.WebBrowserを使ってのHTMファイル内の全ての要素を調査
2.上記実行結果とコントロール類の配置図
3.参考資料
4.
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認: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 〜 Button4 / WebBrowser1 / TextBox1 〜 TextBox3 / SplitContainer1
トロール:
このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので)
必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい)
このページのトップへ移動します。 1.WebBrowserを使ってのHTMファイル内の全ての要素を調査

Public Class Form1

#Region "本文関係の処理(Button_Click イベントの処理等)"

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'全ての要素を取得(その1)
    TextBox2.Text = ""
    TextBox2.Refresh()
    Dim myText As New System.Text.StringBuilder()
    Dim i As Integer = 0
    Dim he As HtmlElement = Nothing
    myText.Append(fStrCut("No.", 8) & fStrCut("要素名", 15) & fStrCut("Type", 24) & _
    fStrCut("ID", 36) & fStrCut("NAME", 27) & fStrCut("value", 33) & fStrCut("Text", 50) & _
    ControlChars.CrLf & New System.String("-"c, 195) & vbCrLf)
    With WebBrowser1
        For Each he In .Document.All
            If he.TagName = "IFRAME" Or he.TagName = "shape" Then
                '実行時エラーが発生するので無視する(上記以外にもあれば追加して下さい)
                Dim no1 As String = fStrCut(i.ToString, 8)
                Dim tn1 As String = fStrCut(he.TagName, 15) & _
                "★★★★★ 必要な場合別途調査して下さい。★★★★★"
                myText.Append(no1 & tn1 & ControlChars.CrLf)
                i = i + 1
            Else
                '取得したデータを表示する為に加工
                Dim no As String = fStrCut(i.ToString, 8)
                Dim tn As String = fStrCut(he.TagName, 15)
                Dim ty As String = fStrCut(he.GetAttribute("Type"), 24)
                Dim id As String = fStrCut(he.GetAttribute("ID"), 36)
                Dim na As String = fStrCut(he.GetAttribute("NAME"), 24) & "  "
                Dim va As String = fStrCut(he.GetAttribute("value"), 30) & "  "
                Dim tx As String = fStrCut(Replace(he.InnerText, vbCrLf, ""), 50)
                If tn = "IMG      " Then
                    va = fStrCut(he.GetAttribute("alt"), 30) & "  "
                    tx = fStrCut(he.GetAttribute("src"), 50)
                End If
                If tn = "A       " Then
                    va = fStrCut(tx, 30) & "  "
                    tx = fStrCut(he.GetAttribute("href"), 50)
                End If
                myText.Append(no & tn & ty & id & na & va & tx & ControlChars.CrLf)
                i = i + 1
            End If
            If (i Mod 30) = 0 Then
                myText.Append(New System.String("-"c, 195) & vbCrLf & fStrCut("No.", 8) & _
                fStrCut("要素名", 15) & fStrCut("Type", 24) & fStrCut("ID", 36) & fStrCut("NAME", 27) & _
                fStrCut("value", 33) & fStrCut("Text", 50) & vbCrLf & New System.String("-"c, 195) & vbCrLf)
            End If
        Next
      End With
      TextBox2.Text = myText.ToString()
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'全ての要素を取得(その2)
    TextBox2.Text = ""
    TextBox2.Refresh()
    Dim myText As New System.Text.StringBuilder()
    Dim i As Integer = 0
    Dim he As HtmlElement = Nothing
    myText.Append(fStrCut("No.", 6) & fStrCut("F_No", 6) & " " & fStrCut("要素名", 15) & fStrCut("Type", 24) & _
    fStrCut("ID", 36) & fStrCut("NAME", 27) & fStrCut("value", 33) & fStrCut("Text", 50) & _
    ControlChars.CrLf & New System.String("-"c, 195) & vbCrLf)
    Debug.Print(WebBrowser1.Document.Forms.Count.ToString)
    With WebBrowser1
        For k As Integer = 0 To .Document.Forms.Count - 1
            For Each he In .Document.Forms(k).All
                If he.TagName = "IFRAME" Or he.TagName = "shape" Then
                    '実行時エラーが発生するので無視する(上記以外にもあれば追加して下さい)
                    Dim no1 As String = fStrCut(i.ToString, 8)
                    Dim tn1 As String = fStrCut(he.TagName, 15) & fStrCut("F_No", 6) & _
                    "★★★★★ 必要な場合別途調査して下さい。★★★★★"
                        myText.Append(no1 & tn1 & ControlChars.CrLf)
                    i = i + 1
                Else
                    '取得したデータを表示する為に加工
                    Dim no As String = fStrCut(i.ToString, 8)
                    Dim tn As String = fStrCut(he.TagName, 15)
                    Dim ty As String = fStrCut(he.GetAttribute("Type"), 24)
                    Dim id As String = fStrCut(he.GetAttribute("ID"), 36)
                    Dim na As String = fStrCut(he.GetAttribute("NAME"), 24) & "  "
                    Dim va As String = fStrCut(he.GetAttribute("value"), 30) & "  "
                    Dim tx As String = fStrCut(Replace(he.InnerText, vbCrLf, ""), 50)
                    If tn = "img      " Then
                        va = fStrCut(he.GetAttribute("alt"), 30) & "  "
                        tx = fStrCut(he.GetAttribute("src"), 50)
                    End If
                    If tn = "A       " Then
                        va = fStrCut(tx, 30) & "  "
                        tx = fStrCut(he.GetAttribute("href"), 50)
                    End If
                    myText.Append(no & fStrCut(k.ToString, 6) & tn & ty & id & na & va & tx & ControlChars.CrLf)
                    i = i + 1
                End If
                If (i Mod 30) = 0 Then
                    myText.Append(New System.String("-"c, 195) & vbCrLf & fStrCut("No.", 6) & fStrCut("F_No", 6) & " " & _
                    fStrCut("要素名", 15) & fStrCut("Type", 24) & fStrCut("ID", 36) & fStrCut("NAME", 27) & _
                    fStrCut("value", 33) & fStrCut("Text", 50) & vbCrLf & New System.String("-"c, 195) & vbCrLf)
                End If
            Next
        Next
    End With
    TextBox2.Text = myText.ToString()
End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
'指定の要素を取得
    TextBox2.Text = ""
    TextBox2.Refresh()
    Dim myText As New System.Text.StringBuilder()
    Dim i As Integer = 0
    Dim he As HtmlElement = Nothing
    myText.Append(fStrCut("No.", 8) & fStrCut("要素名", 15) & fStrCut("Type", 24) & _
    fStrCut("ID", 36) & fStrCut("NAME", 27) & fStrCut("value", 33) & fStrCut("Text", 50) & _
    ControlChars.CrLf & New System.String("-"c, 195) & vbCrLf)
    With WebBrowser1
        For Each he In .Document.GetElementsByTagName(TextBox3.Text)
            If he.TagName = "IFRAME" Or he.TagName = "shape" Then
                '実行時エラーが発生するので無視する(上記以外にもあれば追加して下さい)
                Dim no1 As String = fStrCut(i.ToString, 8)
                Dim tn1 As String = fStrCut(he.TagName, 15) & _
                "★★★★★ 必要な場合別途調査して下さい。★★★★★"
                myText.Append(no1 & tn1 & ControlChars.CrLf)
                i = i + 1
            Else
                '取得したデータを表示する為に加工
                Dim no As String = fStrCut(i.ToString, 8)
                Dim tn As String = fStrCut(he.TagName, 15)
                Dim ty As String = fStrCut(he.GetAttribute("Type"), 24)
                Dim id As String = fStrCut(he.GetAttribute("ID"), 36)
                Dim na As String = fStrCut(he.GetAttribute("NAME"), 24) & "  "
                Dim va As String = fStrCut(he.GetAttribute("value"), 30) & "  "
                Dim tx As String = fStrCut(Replace(he.InnerText, vbCrLf, ""), 50)
                If tn = "img      " Then
                    va = fStrCut(he.GetAttribute("alt"), 30) & "  "
                    tx = fStrCut(he.GetAttribute("src"), 50)
                End If
                If tn = "A       " Then
                    va = fStrCut(tx, 30) & "  "
                    tx = fStrCut(he.GetAttribute("href"), 50)
                End If
                myText.Append(no & tn & ty & id & na & va & tx & ControlChars.CrLf)
                i = i + 1
            End If
            If (i Mod 30) = 0 Then
                myText.Append(New System.String("-"c, 195) & vbCrLf & fStrCut("No.", 8) & _
                fStrCut("要素名", 15) & fStrCut("Type", 24) & fStrCut("ID", 36) & fStrCut("NAME", 27) & _
                fStrCut("value", 33) & fStrCut("Text", 50) & vbCrLf & New System.String("-"c, 195) & vbCrLf)
            End If
        Next
    End With
    TextBox2.Text = myText.ToString()
End Sub

#End Region

#Region "付帯処理関係(関数・メソッド及びWin32 API 関数の宣言及び変数の宣言等含む)"

Private myUrl As Uri = New Uri("http://hanatyan.sakura.ne.jp/testfile1.htm")          '表示するURL

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'サイトを表示
    myUrl = New Uri(TextBox1.Text)
    WebBrowser1.Navigate(myUrl)
    Button2.Enabled = False
    Button3.Enabled = False
    Button4.Enabled = False
    Button5.Enabled = False
    With TextBox2
        .Multiline = True
        .ScrollBars = ScrollBars.Both
        .WordWrap = False
        .Text = ""
        .Font = New Font("MS ゴシック", 9, FontStyle.Regular)
    End With
End Sub

Private Sub WebBrowser1_DocumentCompleted(sender As Object, _
                                e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
'指定の URL が表示されるまで待つ
    'If e.Url <> myUrl Then
    '   Exit Sub
    'End If
    Button2.Enabled = True
    Button3.Enabled = True
    Button4.Enabled = True
    Button5.Enabled = True
End Sub

Private Function fStrCut(ByVal Mystring As String, ByVal nLen As Integer) As String
'文字列を指定のバイト数にカットする関数(漢字分断回避)
    If Mystring Is Nothing Then
        Mystring = "---- "
    End If
    If nLen < 1 Or Mystring.Length < 1 Then
        Mystring = "---- "
    End If
    Dim sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
    Dim TempLen As Integer = sjis.GetByteCount(Mystring)
    If TempLen <= nLen Then   '文字列が指定のバイト数未満の場合スペースを付加する
        Return Mystring.PadRight(nLen - (TempLen - Mystring.Length), " "c)
    End If
    Dim tempByt() As Byte = sjis.GetBytes(Mystring)
    Dim strTemp As String = sjis.GetString(tempByt, 0, nLen)
    '末尾が漢字分断されたら半角スペースと置き換え(VB2005="・" で.NET2003=NullChar になります)
    If strTemp.EndsWith(ControlChars.NullChar) Or strTemp.EndsWith("・") Then
        strTemp = sjis.GetString(tempByt, 0, nLen - 1) & " "
    End If
    Return strTemp
End Function

#End Region

End Class

このページのトップへ移動します。 2.上記実行結果とコントロール類の配置図
 図1.全ての要素を取得(その1)の実行結果
 internet02_01.gif

 図2.input 要素の取得結果
 internet02_02.gif

このページのトップへ移動します。 3.参考資料

HTMLの情報を取得する為の主なメソッド・プロパティ
 GetAttribute("alt")         代替テキストを取得する場合に使用
 GetAttribute("checked")       チェックボックスやラジオボタンの選択状況を取得
 GetAttribute("href")        リンク先のURL等を取得する場合
 GetAttribute("id")         要素を識別するために固有の ID名を取得する場合
 GetAttribute("name")        要素に付けられたname属性を取得する場合
 GetAttribute("selected")      オプションボタン等の選択状況を取得する場合
 GetAttribute("selectedIndex")    どのオプションボタン等が選択されているかを取得する場合
 GetAttribute("src")         画像ファイル等の保存先の URI を取得する場合
 GetAttribute("title")        要素内に記入されている title 属性を取得する場合
 GetAttribute("type")        要素に付けられたtype属性を取得する場合
 GetAttribute("value")        その要素に記入されている値を取得する場合
 GetElementById("ID名")       要素の ID 属性を検索キーとして使用して HtmlElement を取得する場合
 GetElementsByName("属性名")     対応する名前を指定して要素のコレクションを取得
 GetElementsByTagName("タグ名")   指定した HTML タグを持つ要素のコレクションを取得する場合
 InnerHtml              HTML マークアップを取得または設定する場合
 InnerText              テキストを取得または設定する場合
 OuterHtml              現在の要素の HTML コードを取得または設定する場合
 OuterText              現在の要素のテキストを取得または設定する場合

HTMLの情報を設定する為の主なメソッド・プロパティ
 InnerHtml              HTML マークアップを取得または設定する場合
 InnerText              テキストを取得または設定する場合
 InvokeMember("Click")        ボタン・リンク等をクリックする場合
 InvokeMember("focus")        フォーカスを設定したい場合(画面の見える位置までスクロール)
 InvokeMember("onChange")      Change イベントを発生させたい場合
 InvokeMember("submit")       送信ボタンをクリックしてFORM action を実行させたい場合
 InvokeScript("関数名")       HTML ページで定義されたアクティブスクリプト関数を実行
 OuterHtml              現在の要素の HTML コードを取得または設定する場合
 OuterText              現在の要素のテキストを取得または設定する場合
 RaiseEvent("onChange")       Change イベントを発生させたい場合
 SetAttribute("Checked", "")     オプションボタン・チェックボックスの選択のチェックを外す場合
 SetAttribute("Checked", "true")   オプションボタン・チェックボックスを選択する場合
 SetAttribute("Selected", "True")  リストボックスのアイテムを選択する場合
 SetAttribute("selectedIndex", "2") リストボックス等の指定のアイテムを選択する場合
 SetAttribute("value", "文字列")   テキストボックス等に書き込む場合

MSDN HtmlElement クラスの解説
 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmlelement.aspx

HTMLタグリファレンス(ABC順)
 http://www.htmq.com/html/index.shtml

要素・属性 辞典
 http://w3g.jp/xhtml/dic/

このページのトップへ移動します。 4.


このページのトップへ移動します。 5. 



このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)





このページのトップへ移動します。