InternetExplorerによるHTML要素の指定
InternetExplorerで表示しているWebページのテキストボックスやボタンなどのHTML要素に対して、
プログラムで値を設定したりクリックしたりすることができます。
これら操作を行うためには、まずは操作対象のHTML要素を探し出す必要があります。
htmlのコードに設定されているid属性やname属性等の情報を使って要素を特定する方法について説明します。
目次
name属性、id属性、インデックス番号を指定してページ内(document内)の全ての要素にアクセスする方法です。
※HTML5ではDocument.all
は非推奨となっていますので、後述するgetElementById
getElementsByName
などを使いましょう。
実装方法
Document.All
プロパティを使用します。
All
プロパティにname属性、id属性、インデックス番号を指定して要素を特定します。
name属性を指定した場合は複数の要素が取得されるため、さらに要素を特定するためにインデックス番号も指定する必要があります。
'インデックス指定
IE.Document.All(n).~ ※先頭からn番目の要素にアクセスします。(nは0~の数値)
'id属性を指定
IE.Document.All("id属性").~
IE.Document.All.Item("id属性").~
'name属性を指定
IE.Document.All("name属性")(n).~ ※指定したname属性に一致する複数要素のうちn番目にアクセスします。(nは0~の数値)
IE.Document.All.Item("name属性")(n).~
'全要素の数
count = IE.Document.All.Length
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | For i = 0 As Integer To objIE.Document.All.Length - 1
Debug.WriteLine(objIE.Document.All(i).InnerTEXT)
Debug.WriteLine(objIE.Document.All.Item(i).InnerTEXT)
Next
objIE.Document.all( "inputid2" ).value = "テキスト2 all id"
objIE.Document.all.item( "inputid3" ).value = "テキスト3 all item id"
objIE.Document.all( "inputname" )(1).value = "テキスト2 all name 1"
objIE.Document.all.item( "inputname" )(2).value = "テキスト3 all item name"
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | for ( int i = 0; i < objIE.Document.All.Length; i++)
{
Console.WriteLine(objIE.Document.All(i).InnerText);
Console.WriteLine(objIE.Document.All.Item(i).InnerText);
}
objIE.Document.all( "inputid2" ).value = "テキスト2 all id" ;
objIE.Document.all.item( "inputid3" ).value = "テキスト3 all item id" ;
objIE.Document.all( "inputname" )(1).value = "テキスト2 all name 1" ;
objIE.Document.all.item( "inputname" )(2).value = "テキスト3 all item name" ;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Dim i As Integer
For i = 0 To objIE.Document.All.Length - 1
Debug.Print objIE.Document.All(i).InnerTEXT
Debug.Print objIE.Document.All.Item(i).InnerTEXT
Next
objIE.Document.all( "inputid2" ).value = "テキスト2 all id"
objIE.Document.all.item( "inputid3" ).value = "テキスト3 all item id"
objIE.Document.all( "inputname" )(1).value = "テキスト2 all name 1"
objIE.Document.all.item( "inputname" )(2).value = "テキスト3 all item name"
|
参考
id属性を指定して一致する要素にアクセスする方法です。
実装方法
document.getElementById
メソッドを使用します。
getElementById
メソッドの引数にid属性を指定して要素を特定します。
メソッドの戻り値は「IHTMLElement」またはnull(一致する要素がない場合)となります。
IE.Document.getElementById("id").~
サンプル
1 2 3 4 5 | objIE.Document.getElementById( "inputid2" ).value = "テキスト2 all id"
|
1 2 3 4 5 | objIE.Document.getElementById( "inputid2" ).value = "テキスト2 all id" ;
|
1 2 3 4 5 | objIE.document.getElementById( "inputid2" ).Value = "テキスト2 all id"
|
参考
name属性を指定して一致する複数の要素にアクセスする方法です。
実装方法
document.getElementsByName
メソッドを使用します。
getElementsByName
メソッドの引数にname属性を指定すると、一致する要素を全て抽出します。
name属性は同名が複数存在しますので、結果も複数取得されます。
メソッドの戻り値はIHTMLElementCollection
またはnull
(一致する要素がない場合)となります。
複数取得できた要素の中で何番目のものを使うかを、添え字で指定します。
IE.Document.getElementsByName("name属性")(n).~
IE.Document.getElementsByName("name属性").item(n).~
※nは0~の数値。指定したname属性に一致した複数の要素のうち、何番目を使用するか。
サンプル
1 2 3 4 5 6 7 8 | objIE.Document.getElementsByName( "inputname" )(1).value = "テキスト2 all name 1"
objIE.Document.getElementsByName( "inputname" ).item(2).value = "テキスト3 all item name 2"
|
1 2 3 4 5 6 7 8 | objIE.Document.getElementsByName( "inputname" )(1).value = "テキスト2 all name 1" ;
objIE.Document.getElementsByName( "inputname" ).item(2).value = "テキスト3 all item name 2" ;
|
1 2 3 4 5 6 7 8 | objIE.document.getElementsByName( "inputname" )(1).Value = "テキスト2 all name 1"
objIE.document.getElementsByName( "inputname" ).Item(2).Value = "テキスト3 all item name 2"
|
参考
class属性を指定して一致する複数の要素にアクセスする方法です。
実装方法
document.getElementsByClassName
メソッドを使用します。
getElementsByClassName
メソッドの引数にclass属性を指定すると、一致する要素を全て抽出します。
class属性は同名が複数存在しますので、結果も複数取得されます。
メソッドの戻り値はIHTMLElementCollection
またはnull
(一致する要素がない場合)となります。
複数取得できた要素の中で何番目のものを使うかを、添え字で指定します。
IE.GetElementsByClassName("name")(n).~
IE.GetElementsByClassName("name").item(n).~
※nは0~の数値
サンプル
1 2 3 4 5 | objIE.Document.getElementsByClassName( "inputclass" )(1).value = "テキスト2 class 1"
|
1 2 3 4 5 | objIE.Document.getElementsByClassName( "inputclass" )(1).value = "テキスト2 class 1" ;
|
1 2 3 4 5 | objIE.document.getElementsByClassName( "inputclass" )(1).Value = "テキスト2 class 1"
|
参考
タグ名を指定して一致する複数の要素にアクセスする方法です。
実装方法
document.getElementsByTagName
メソッドを使用します。
getElementsByTagName
メソッドの引数にタグ名を指定すると、一致する要素を全て抽出します。
タグは同名が複数存在しますので、結果も複数取得されます。
メソッドの戻り値はIHTMLElementCollection
またはnull
(一致する要素がない場合)となります。
複数取得できた要素の中で何番目のものを使うかを、添え字で指定します。
IE.Document.getElementsByTagName("tag")(n)~
IE.Document.getElementsByTagName("tag").Item(n)~
※nは0~の数値
サンプル
1 2 3 4 5 6 7 8 9 10 | objIE.Document.GetElementsByTagName( "input" )(0).value = "テキスト1 tag 0"
For Each element As mshtml.IHTMLElement In objIE.Document.GetElementsByTagName( "input" )
Debug.WriteLine(element.id)
Next
|
1 2 3 4 5 6 7 8 9 10 11 | objIE.Document.GetElementsByTagName( "input" )(0).value = "テキスト1 tag 0" ;
foreach (mshtml.IHTMLElement element in objIE.Document.GetElementsByTagName( "input" ))
{
Console.WriteLine(element.id);
}
|
1 2 3 4 5 6 7 8 9 10 11 12 | Dim element As IHTMLElement
objIE.document.getElementsByTagName( "input" )(0).Value = "テキスト1 tag 0"
For Each element In objIE.document.getElementsByTagName( "input" )
Debug.Print (element.ID)
Next
|
参考
html内の全てのリンク(アンカー要素<a>
とarea要素<area>
)オブジェクトにアクセスする方法です。
実装方法
Document.Links
プロパティを使用します。
html内のすべてのリンクがコレクション型IHTMLElementCollection
で取得できます。
要素が見つからなかった場合はnull
が返却されます。
コレクション型なので、インデックス番号を指定してアンカー要素を取得できますし、
Length
プロパティでリンク数を取得できます。
リンクオブジェクトは、href
プロパティ(href属性の値にアクセス)やinnerText
プロパティ(<a>タグ中の文字列にアクセス)が使えますので、
コレクションをループしてこれらプロパティ値と一致するか比較すれば、
クリックしたいリンクオブジェクト探し出すような使い方ができます。
'アンカー要素を全て取得する
IE.Document.Links
'nに0~の数値を指定することで、該当するアンカー要素を取得する
IE.Document.Links(n)
'アンカー要素の数を取得する。
IE.Document.Links.Length
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | For i As Integer = 0 To objIE.Document.Links.Length - 1
Debug.WriteLine(objIE.Document.Links(i).Href)
Debug.WriteLine(objIE.Document.Links(i).InnerTEXT)
If objIE.Document.Links(i).InnerTEXT = "リンク1" Then
objIE.Document.Links(i).Click()
Exit For
End If
Next
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | for ( int i = 0; i < objIE.Document.Links.Length; i++) {
Console.WriteLine(objIE.Document.Links[i].Href);
Console.WriteLine(objIE.Document.Links[i].InnerTEXT);
if (objIE.Document.Links[i].InnerTEXT == "リンク1" )
{
objIE.Document.Links[i].Click();
break ;
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Dim i As Integer
For i = 0 To objIE.document.Links.Length - 1
Debug.Print (objIE.document.Links(i).href)
Debug.Print (objIE.document.Links(i).innerText)
If objIE.document.Links(i).innerText = "リンク1" Then
objIE.document.Links(i).Click
Exit For
End If
Next
|
参考
form要素内の全ての要素にアクセスする方法です。
form要素の指定は、name属性、id属性、インデックス番号が使用できます。
submit/resetの実行が行えます。
実装方法
document.forms
プロパティを使用します。
forms
プロパティにname属性/id属性/インデックス番号を指定してform要素を特定します。
特定したform内の全ての要素はIHTMLElementCollection
で取得できます。
'インデックス指定
IE.Document.forms(n).~ ※ページの先頭からn番目のform要素にアクセスします。(nは0~の数値)
'id属性/name属性の直接指定
IE.Document.forms("name属性またはid属性").~ ※form要素に定義されているid/name属性を指定します。
サンプル
参考
frame要素内の全ての要素にアクセスする方法です。
frame要素の指定は、name属性/id属性/インデックス番号が使用できます。
※HTML5ではframe要素は廃止されました。
実装方法
document.frames
プロパティを使用します。
frames
プロパティにname属性、id属性、インデックス番号を指定してframe要素を特定します。
特定したframe内の全要素はIHTMLFramesCollection2
で取得できます。
'インデックス指定
IE.Document.Frames(n).~ ※ページの先頭からn番目のframe要素にアクセスします。(nは0~の数値)
'id属性/name属性の直接指定
IE.Document.Frames("name属性またはid属性").~ ※frame要素に定義されているid/name属性を指定します。
'frame内の要素の数
IE.Document.Frames.length
'frame内の要素にアクセスする場合
IE.Document.Frames(n).Document.~
'複数frameで構成されている場合
IE.Document.Frames(n).Frames(n).Document.~
サンプル
1 2 3 4 5 6 7 8 9 | objIE.Document.Frames(1).Document.All.Item( "login" ).value = "login"
objIE.Document.Frames( "frame1" ).Document.All.Item( "login" ).value = "login"
objIE.Document.Frames(0).Frames(0).Document.All.Item( "login2" ).value = "login"
|
1 2 3 4 5 6 7 8 9 | objIE.Document.Frames[1].Document.All.Item[ "login" ].value = "login" ;
objIE.Document.Frames[ "frame1" ].Document.All.Item[ "login" ].value = "login" ;
objIE.Document.Frames[0].Frames[0].Document.All.Item[ "login2" ].value = "login" ;
|
1 2 3 4 5 6 7 8 9 | objIE.Document.Frames(1).Document.All.Item( "login" ).value = "login"
objIE.Document.Frames( "frame1" ).Document.All.Item( "login" ).value = "login"
objIE.Document.Frames(0).Frames(0).Document.All.Item( "login2" ).value = "login"
|
参考