人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: crashtruck
●カテゴリ:コンピュータ
✍キーワード:INDEX イベント クリック コード リンク
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
●100ポイント ベストアンサー

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


今回の処理では「画面左「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...

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ