■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#4338-2getElementsByNameすぷーきー2002-01-27(日) 12:53
     #4340-2RE#4338:getElementsByName魔界の仮面弁士2002-01-27(日) 13:13
     #4340-0RE#4338:getElementsByName魔界の仮面弁士2002-01-27(日) 22:13
     #4381-2RE#4340:getElementsByNameすぷーきー2002-01-28(月) 15:14
     #4385-2RE#4381:getElementsByName魔界の仮面弁士2002-01-28(月) 19:14
     #4381-0RE#4340:getElementsByNameすぷーきー2002-01-29(火) 00:14
     #4385-0RE#4381:getElementsByName魔界の仮面弁士2002-01-29(火) 04:14
#4338-2
getElementsByName
少し前のことだと思うのですが、魔界の仮面弁士さんの書きこみで、

>Private Sub Form_Load()
>     WebBrowser1.Navigate2 "http://www.google.com"
>     Text1.Text = "検索文字列"
>     Command1.Caption = "検索"
> End Sub
> 
> Private Sub Command1_Click()
>     With WebBrowser1.Document
>         '検索文字列を指定
>         .getElementsByName("q")(0).Value = Text1.Text
>         'Submitボタンを押す
>         .getElementsByName("btnG")(0).Click
>     End With

というのがありました。ブラウザで開いたページの中のボタンを押す方法
についての回答だったと記憶しています。

そのとき、使えそうなコードだと思いメモしておいたのを今になって掘り
返しました(^^;
で、さっそくやってみました。結果、、、、うまくいきました。でも調子
に乗っていろいろといじっているとふと、気付いたことがあるので質問さ
せてください。
このコードがhtmlのソース中の
<input type="text" name="ほげほげ" value="">
などのname=の部分を参照していることはなんとなくわかりました。ですが、
もし上記のソース中にname=の部分がなかった場合どうやってプロパティを
操作するターゲットを決めればよいのでしょうか?(たとえば、
<input type="button" class="aa" value="bb">等の場合)
#4340-2
RE#4338:getElementsByName
> などのname=の部分を参照していることはなんとなくわかりました。ですが、
そうです。
getElementsByNameはname属性、getElementsByIDは、id属性から
エレメントの検索を行います。

> もし上記のソース中にname=の部分がなかった場合どうやってプロパティを
> 操作するターゲットを決めればよいのでしょうか?(たとえば、
> <input type="button" class="aa" value="bb">等の場合)
allプロパティを使うと、すべてのエレメントを列挙する事ができます。
また、getElementsByTagNameを使って、タグ名からの検索を行うこともできます。

getElementsByTagNameを使った具体的なサンプルは、Q&A掲示板の#4173をご覧下さい。
input type=button を取り出すサンプルではありませんが、参考になるかもしれません。

上記のサンプルでは、検索ページ( http://www2j.biglobe.ne.jp/~little-g/vb_search.html )の
上部にあるH2エレメント (HTMLソースから言えば、HTML/BODY/CENTER/H2 の場所)にある、
『VB初心者友の会掲示板 検 索』の文字を、動的に書き換えています。


なお、HTMLを操作する具体的な方法は、DHTML関連の参考文献を読んでみると良いですよ。

VBから操作するサンプルは、あまり見かけませんが、VBScript、JavaScript、JScript等での
サンプルは、さがせば幾つかありますので、参考になるかと思います。

なお、MSHTML.TLBでの解説は、Internet SDK等をご覧下さい。
http://www.microsoft.com/japan/developer/library/
  default.asp?URL=/japan/developer/library/jpisdk/dhtml/dhtml.htm
#4340-0
RE#4338:getElementsByName
> などのname=の部分を参照していることはなんとなくわかりました。ですが、
そうです。
getElementsByNameはname属性、getElementsByIDは、id属性から
エレメントの検索を行います。

> もし上記のソース中にname=の部分がなかった場合どうやってプロパティを
> 操作するターゲットを決めればよいのでしょうか?(たとえば、
> <input type="button" class="aa" value="bb">等の場合)
allプロパティを使うと、すべてのエレメントを列挙する事ができます。
また、getElementsByTagNameを使って、タグ名からの検索を行うこともできます。

getElementsByTagNameを使った具体的なサンプルは、Q&A掲示板の#4173をご覧下さい。
input type=button を取り出すサンプルではありませんが、参考になるかもしれません。

上記のサンプルでは、検索ページ( http://www2j.biglobe.ne.jp/~little-g/vb_search.html )の
上部にあるH2エレメント (HTMLソースから言えば、HTML/BODY/CENTER/H2 の場所)にある、
『VB初心者友の会掲示板 検 索』の文字を、動的に書き換えています。


なお、HTMLを操作する具体的な方法は、DHTML関連の参考文献を読んでみると良いですよ。

VBから操作するサンプルは、あまり見かけませんが、VBScript、JavaScript、JScript等での
サンプルは、さがせば幾つかありますので、参考になるかと思います。

なお、MSHTML.TLBでの解説は、Internet SDK等をご覧下さい。
http://www.microsoft.com/japan/developer/library/
  default.asp?URL=/japan/developer/library/jpisdk/dhtml/dhtml.htm
#4381-2
RE#4340:getElementsByName
 レスありがとうございますm_m
 
> また、getElementsByTagNameを使って、タグ名からの検索を行うこともできます。
 まずはこれからやってみました。最終的には、
 WebBrowser1.Document.getElementsByTagName("input")(0).Click
 とすることでとりあえずその場はしのげました。
 しかし、この場合HTMLソースの中にinputタグがひとつしか存在しないときしか通用
 しませんでした。
 そこで次に、

> allプロパティを使うと、すべてのエレメントを列挙する事ができます。
 にチャレンジしてみました。
 
> なお、MSHTML.TLBでの解説は、Internet SDK等をご覧下さい。
 ここを参考に
For i = 0 To WebBrowser1.Document.All.length - 1
    Text1.Text = Text1.Text + WebBrowser1.Document.All(i).tagName + vbCrLf
Next
 とすることで、テキストボックスにタグの名前を列挙するところまではなんとかできました。
 これで、目的のinputタグが上から何番目にあるかを数え、それを対象に操作すれば
 うまくかもしれないと思ったのですが、その方法がさっぱりわかりません。
 何か方法はないものでしょうか? 
 何度もすみませんがよろしくお願いします。
#4385-2
RE#4381:getElementsByName
>  WebBrowser1.Document.getElementsByTagName("input")(0).Click
getElementsByTagNameは、適合するタグを含むコレクションを返します。
このコレクションは、For Eachで列挙したり、上記のように 0, 1, …などの
インデックスを使って、各エレメントにアクセスすることもできます。

各エレメントを取得する為のプロパティは、他にもいくつか用意されていますので、
都合にあわせて使い分けてみてください。(以下に、いくつかのプロパティを例として挙げてみます)

Option Explicit

Private Sub Command1_Click()
    Dim Doc As HTMLDocument
    Dim Body As HTMLBody
    Dim Center As HTMLBlockElement
    Dim Table As HTMLTable
    Dim TR As HTMLTableSection
    Dim TD As HTMLTableCell
    
    Set Doc = WebBrowser1.document
    
    'BodyプロパティでBODYエレメントを取得
    Set Body = Doc.Body
    
    'firstChildで、最初の子エレメントを取得
    Set Center = Body.firstChild
    
    'Childrenで、子エレメント群を取得し、
    'さらに、その中の7番目の要素をitemプロパティで取得
    Set Table = Center.children.Item(5)
    
    'TABLE内の、1番目のTBODYエレメントを取得
    Set TR = Table.tBodies.Item(0)
    
    'getElementsByTagNameで、子エレメント中のTDタグの一覧を
    '取得し、さらにその中の1番目の要素をitemプロパティで取得
    '(「ele(0)」は「ele.item(0)」の省略表記)
    Set TD = TR.getElementsByTagName("TD")(0)
    
    'この中にあるHTMLを表示する
    MsgBox TD.innerHTML

    'この中にある文字列を表示する
    MsgBox TD.innerText

    '中のテキストを書き換えてしまう
    TD.innerText = "魔界の仮面弁士"

    'そのテキストの背景色を変える
    TD.style.backgroundColor = "skyblue"

    Set Doc = Nothing
    Set TD = Nothing
    Set TR = Nothing
    Set Table = Nothing
    Set Center = Nothing
    Set Body = Nothing
End Sub

Private Sub Form_Load()
    WebBrowser1.Navigate2 "http://www2j.biglobe.ne.jp/~little-g/vbtomo.html"
End Sub


> For i = 0 To WebBrowser1.Document.All.length - 1
>     Text1.Text = Text1.Text + WebBrowser1.Document.All(i).tagName + vbCrLf
> Next
>  とすることで、テキストボックスにタグの名前を列挙するところまではなんとかできました。
allは、For Eachを使ってアクセスすることもできます。
   For Each Elem In WebBrowser1.document.all
       Debug.Print "<"; Elem.tagName; ">"
   Next Elem


>  これで、目的のinputタグが上から何番目にあるかを数え、それを対象に操作すれば
>  うまくかもしれないと思ったのですが、その方法がさっぱりわかりません。
えぇと………「その方法」って、どの方法でしょう?(^^;

……まず、inputタグの列挙法はわかりましたよね?
   Set X = 〜.document.getElementsByTagName(タグ名)
で、各要素のコレクションを取得でき、lengthを使って、その数を知ります。
   Debug.Print X.length
あとは、itemプロパティで、個々の要素にアクセスできます。
   Set Y = X.item(0)
   Set Z = X.item(0)
   Debug.Print Y.outerHTML
   Z.style.Color = "red"

>  何か方法はないものでしょうか? 
ごめんなさい、「どの部分でわからなくなっているのか」がわかりません。m(_ _;)m
#4381-0
RE#4340:getElementsByName
 レスありがとうございますm_m
 
> また、getElementsByTagNameを使って、タグ名からの検索を行うこともできます。
 まずはこれからやってみました。最終的には、
 WebBrowser1.Document.getElementsByTagName("input")(0).Click
 とすることでとりあえずその場はしのげました。
 しかし、この場合HTMLソースの中にinputタグがひとつしか存在しないときしか通用
 しませんでした。
 そこで次に、

> allプロパティを使うと、すべてのエレメントを列挙する事ができます。
 にチャレンジしてみました。
 
> なお、MSHTML.TLBでの解説は、Internet SDK等をご覧下さい。
 ここを参考に
For i = 0 To WebBrowser1.Document.All.length - 1
    Text1.Text = Text1.Text + WebBrowser1.Document.All(i).tagName + vbCrLf
Next
 とすることで、テキストボックスにタグの名前を列挙するところまではなんとかできました。
 これで、目的のinputタグが上から何番目にあるかを数え、それを対象に操作すれば
 うまくかもしれないと思ったのですが、その方法がさっぱりわかりません。
 何か方法はないものでしょうか? 
 何度もすみませんがよろしくお願いします。
#4385-0
RE#4381:getElementsByName
>  WebBrowser1.Document.getElementsByTagName("input")(0).Click
getElementsByTagNameは、適合するタグを含むコレクションを返します。
このコレクションは、For Eachで列挙したり、上記のように 0, 1, …などの
インデックスを使って、各エレメントにアクセスすることもできます。

各エレメントを取得する為のプロパティは、他にもいくつか用意されていますので、
都合にあわせて使い分けてみてください。(以下に、いくつかのプロパティを例として挙げてみます)

Option Explicit

Private Sub Command1_Click()
    Dim Doc As HTMLDocument
    Dim Body As HTMLBody
    Dim Center As HTMLBlockElement
    Dim Table As HTMLTable
    Dim TR As HTMLTableSection
    Dim TD As HTMLTableCell
    
    Set Doc = WebBrowser1.document
    
    'BodyプロパティでBODYエレメントを取得
    Set Body = Doc.Body
    
    'firstChildで、最初の子エレメントを取得
    Set Center = Body.firstChild
    
    'Childrenで、子エレメント群を取得し、
    'さらに、その中の7番目の要素をitemプロパティで取得
    Set Table = Center.children.Item(5)
    
    'TABLE内の、1番目のTBODYエレメントを取得
    Set TR = Table.tBodies.Item(0)
    
    'getElementsByTagNameで、子エレメント中のTDタグの一覧を
    '取得し、さらにその中の1番目の要素をitemプロパティで取得
    '(「ele(0)」は「ele.item(0)」の省略表記)
    Set TD = TR.getElementsByTagName("TD")(0)
    
    'この中にあるHTMLを表示する
    MsgBox TD.innerHTML

    'この中にある文字列を表示する
    MsgBox TD.innerText

    '中のテキストを書き換えてしまう
    TD.innerText = "魔界の仮面弁士"

    'そのテキストの背景色を変える
    TD.style.backgroundColor = "skyblue"

    Set Doc = Nothing
    Set TD = Nothing
    Set TR = Nothing
    Set Table = Nothing
    Set Center = Nothing
    Set Body = Nothing
End Sub

Private Sub Form_Load()
    WebBrowser1.Navigate2 "http://www2j.biglobe.ne.jp/~little-g/vbtomo.html"
End Sub


> For i = 0 To WebBrowser1.Document.All.length - 1
>     Text1.Text = Text1.Text + WebBrowser1.Document.All(i).tagName + vbCrLf
> Next
>  とすることで、テキストボックスにタグの名前を列挙するところまではなんとかできました。
allは、For Eachを使ってアクセスすることもできます。
   For Each Elem In WebBrowser1.document.all
       Debug.Print "<"; Elem.tagName; ">"
   Next Elem


>  これで、目的のinputタグが上から何番目にあるかを数え、それを対象に操作すれば
>  うまくかもしれないと思ったのですが、その方法がさっぱりわかりません。
えぇと………「その方法」って、どの方法でしょう?(^^;

……まず、inputタグの列挙法はわかりましたよね?
   Set X = 〜.document.getElementsByTagName(タグ名)
で、各要素のコレクションを取得でき、lengthを使って、その数を知ります。
   Debug.Print X.length
あとは、itemプロパティで、個々の要素にアクセスできます。
   Set Y = X.item(0)
   Set Z = X.item(0)
   Debug.Print Y.outerHTML
   Z.style.Color = "red"

>  何か方法はないものでしょうか? 
ごめんなさい、「どの部分でわからなくなっているのか」がわかりません。m(_ _;)m
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)