VB2005Expressで勉強中の者です。Form1のWebbrowser1にhttp://mimi.oc.to/index_L.htmlが表示されているとします。この状態から、画面左「index」の上から二番目「猫の写真が見たーい」の[2]のリンクをクリックするというイベント(?)を起こしたい場合、どのようなコードになるでしょうか。よろしくお願いいたします。

回答の条件
  • 1人50回まで
  • 登録:2006/05/04 04:16:40
  • 終了:2006/05/05 23:10:59

ベストアンサー

id:cx20 No.1

cx20回答回数607ベストアンサー獲得回数1082006/05/04 12:56:49

ポイント100pt

前回より少し複雑になりますが、以下のような感じでしょうか。


今回の処理では「画面左「index」の上から二番目「猫の写真が見たーい」の[2]のリンク」

の要素を見つけなければなりません。


Yahoo のように ID がセットされていれば、GetElementById で要素を取得できますが、

セットされていない場合、1つづつ要素の内容をチェックする必要があります。

([2] は、複数個所で使われているので「猫の写真が見たーい」の位置まで移動する必要があります)


手順としては、

  1. 画面左「index」のフレームに移動する(フレームを1つづつチェックします)
  2. 要素を1つづつチェックします
  3. 上から二番目「猫の写真が見たーい」に移動する(photo.gif のある位置で判別)
  4. [2] の位置に移動する(リンクの名称が[2]かどうかで判別)
  5. [2] のリンクをクリックする

となります。


以下、コードです。

Public Class Form1
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("http://mimi.oc.to/index_L.html")
        
        Do While (WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete)
            My.Application.DoEvents()
            System.Threading.Thread.Sleep(50)
        Loop
        
        Dim elem As HtmlElement = Nothing
        Dim frame As HtmlWindow
        Dim bFindMenu As Boolean = False ' photo.gif(メニューの位置)の検索結果
        Dim bFindLink As Boolean = False ' リンク([2])の検索結果
        ' フレームを1つづつチェックします
        ' 
        ' [FRAMESET]
        '   +[FRAME]    <-- 1つめのフレーム(上部のメニュー)
        '   +[FRAMESET]
        '      +[FRAME] <-- 2つめのフレーム(左側のメニュー)
        '      +[FRAME] <-- 3つめのフレーム(右側の詳細情報)
        ' 
        For Each frame In WebBrowser1.Document.Window.Frames
            ' 要素を1つづつチェックします
            For Each elem In frame.Document.All
                ' <左側メニューの概要>
                '        INDEX
                ' ----------------------
                ' <猫アイコン(satooya.gif)>
                '       里親募集
                '        [1]
                ' ----------------------
                ' <写真アイコン(photo.gif)> <-- このアイコンを見つけたら bFindMenu を True にする(メニュー発見)
                '       猫の写真が
                '       見たーい
                '        [1]
                '        [2]<-- このリンクを発見したら終了
                '        [3]
                '        [4]
                '        [5]
                '        [6]
                ' ----------------------
                ' 
                If Not IsNothing(elem.OuterHtml) Then
                    If elem.OuterHtml.IndexOf("link/contents/photo.gif") <> -1 And elem.TagName = "IMG" Then
                        ' photo.gif を発見
                        bFindMenu = True
                    End If
                End If
                
                If Not bFindMenu Then
                    ' メニューが見つかるまで後続の処理はスキップ
                    Continue For
                End If
                
                If Not IsNothing(elem.InnerText) Then
                    If elem.InnerText.IndexOf("[2]") <> -1 And elem.TagName = "A" Then
                        ' [2]を発見
                        bFindLink = True
                        Exit For
                    End If
                End If
            Next
            
            If bFindLink Then
                Exit For
            End If
        Next
        
        If bFindLink Then
            ' リンクをクリック
            elem.InvokeMember("click")
        End If
        
    End Sub
End Class

以下、参考情報です。

以下のツールを利用することで、閲覧しているページの DOM 情報をツリー表示させることが可能です。

目的の要素を見つけるのに役立つと思います。


■ 窓の杜 - 【NEWS】米MS、HTMLタグをツリー表示できるWeb制作者向けIEツールバーのBeta版を公開

http://www.forest.impress.co.jp/article/2005/09/27/iedevtoolbarb...

id:crashtruck

前回と同じくすばらしいご解答、ありがとうございます。とてもよく理解できました。またよろしくお願いいたします!

2006/05/05 23:09:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません