フレームを使ってるサイトはタグの取得はできない?

このQ&Aのポイント
  • フレームを使ってるサイトでは、タグの取得ができないのでしょうか?
  • VBAでIEを操作していて、サイトにログイン後、imgタグの中にあるaltの値を取得したいのですが、imgタグやtdタグなどがスルーされてしまいます。これはサイトにフレームが使用されているためなのでしょうか?
  • フレームを使っているサイトでは、imgタグやtdタグなどを通過することができず、タグの値を取得することができません。ただし、frameタグを使用すると値を取得することができるようです。
回答を見る
  • ベストアンサー

フレームを使ってるサイトはタグの取得はできない?

フレームを使ってるサイトは、タグの取得はできないのでしょうか? vbaでieを操作をしていて、サイトにログイン後、 imgタグの中にあるaltの値を取得したいのですが、 For Each myObj In objIE.document.all.tags("img") Debug.Print myObj.alt Next これがスルーされてしまいます。 imgタグがいくつもあるのにスルーされてしまうし、imgタグだけでなくtdタグなどもすべてスルーされます。 その原因はサイトにフレームが使われてるからなのでしょうか? なぜか For Each myObj In objIE.document.all.tags("frame") Debug.Print myObj.Name Next なら値が取得できるんです。 For Each myObj In objIE.document.all.tags("form") Debug.Print myObj.Name Next はダメでした。 いつもなら、ソースにformタグがあれば、これで取得できるのですが・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

 例えば、 http://masaboo.cside.com/new_html1/ht_sun/frame02.htm のページでしたら、右側のフレームが <frame src="mainc.htm"> というソースになっていますので、#1さんがお書きの様に objIE.navigate "http://masaboo.cside.com/new_html1/ht_sun/mainc.htm" と、直接に、そのフレームのURLを開いてやれば、フレームの内容、というか、そのページが「objIE」に代入されます。  あるいは、むしろ、こちらの方が簡単かも知れませんが、下記の様に、 Set objFr = objIE.document.Frames.Item(1) というような形で、当該のフレームを、別のオブジェクトに格納してしまえば、objFr が、objIE と同じように扱えます。  例示のページではフレームに名前が付いておりませんが、例えば、 <frame src="menuc.htm" name="hoge"> というように、名前の付いているフレームでしたら、 Set objFr = objIE.document.hoge みたいなことができるかも知れません。 Sub Macro1()   Dim myURL As String   Dim objIE As Object   Dim objFr As Object   Dim myLnk As Object   myURL = "http://masaboo.cside.com/new_html1/ht_sun/frame02.htm"   Set objIE = CreateObject("InternetExplorer.Application")   With objIE     .navigate myURL     While .Busy Or .ReadyState <> 4: DoEvents: Wend     Set objFr = .document.Frames.Item(1)     With objFr       For Each myLnk In .document.getElementsByTagName("a")         Debug.Print myLnk.href       Next     End With     .Quit   End With   Set objIE = Nothing End Sub

UUCZZHSDST
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

そのフレームだけを開いて・・

UUCZZHSDST
質問者

お礼

vbaで、どう操作すればいいでしょうか? 教えてください。

関連するQ&A

  • aタグにalt要素があるかどうかを取得するには

    For Each myObj In objIE.document.all.tags("a") If myObj.alt = "文字" Then End If Next の様に、IEをVBAで操作する際に、altの値は取得できないのでしょうか? 実際上記のコードを実行すると 実行時エラー '438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。 になります。 それともloop中のaタグにalt要素がないからエラーになっているのでしょうか? であれば、aタグにalt要素があるかどうかを取得するにはどうすればいいでしょうか? 出来ればIfステートメントで取得したいです。

  • myObjにタグを格納してループはできない?

    MSXML2.XMLHTTPの時は、 myObjにタグを格納してループはできないのでしょうか? Sub test() Dim objIE As Object Dim myObj As Object Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://○○.html", False objIE.send For Each myObj In objIE.Document.all.tags("p") Next Set objIE = Nothing End Sub 上記だと実行時エラー438になります。 Set objIE =CreateObject("InternetExplorer.Application") でループしないとダメでしょうか? Set objIE =CreateObject("InternetExplorer.Application") は時間がかかるので、できれば Set objIE =CreateObject("MSXML2.XMLHTTP") でやりたかったのですが、タグを格納できないのでしょうか?

  • objIE.Navigate2 "http://.

    win8.1 エクセル2010です。 1ページ目でyahooのソースをチェックし、 2ページ目でグーグルのソースをチェックするにはどうすればいいでしょうか? **************************************************************** Option Explicit Dim objIE As InternetExplorer Sub test() Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") With objIE .Visible = True .navigate "http://www.htmllint.net/html-lint/htmllint.html" End With Call wait For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "http://www.yahoo.co.jp/" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.alt = "CHECK" Then myObj.Click Exit For End If Next Call wait '表示が終わってないのに次のコードに進んでるっぽい objIE.Navigate2 "http://www.htmllint.net/html-lint/htmllint.html", 2048 For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "https://www.google.co.jp/" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.alt = "CHECK" Then myObj.Click Exit For End If Next End Sub Sub wait() Do While objIE.Busy = True DoEvents Loop Do While objIE.readyState <> 4 DoEvents Loop End Sub **************************************************************** というコードを作ったのですが、 1ページ目のタブで、ヤフーのコードをチェックし、 2ページ目のタブで http://www.htmllint.net/html-lint/htmllint.html は表示できたのですが、 2ページ目のタブのボックスに myObj.Value = "https://www.google.co.jp/" を入れることができません。 しかし 上記のコードを実行してもエラーにはなりません。 2回目の For Each myObj In objIE.document.all.tags("input")は 何をループしているのかよくわかりません。 objIE.Navigate2 "http://www.htmllint.net/html-lint/htmllint.html", 2048 で開いた二つ目のタブで For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "https://www.google.co.jp/" Exit For End If Next をやる方法を教えてください。

  • vba ie操作 検索後のタイトルが取得できない

    vba ie操作 ヤフーファイナンス 検索後のタイトルが取得できない win8、エクセル2010です。 ヤフーファイナンスで会社名を検索して、その後のコードを取得したいのですが その場合、タイトルに企業コードがあるので、その文字を取得しようとしたら、 検索前のページが取得されてしまいます。 ------------------------------------------------------------ Dim objIE As New InternetExplorer Sub test() Dim str企業名 As String Dim myObj As Object str企業名 = "ホテルオークラ" Set objIE = CreateObject("InternetExplorer.application") With objIE .navigate "http://finance.yahoo.co.jp/" .Top = 0 .Left = 0 .Width = 1000 .Visible = True End With Call IE_wait For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchText" Then myObj.Value = str企業名 Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchButton" Then myObj.Click Call IE_wait Exit For End If Next Debug.Print objIE.document.Title Set objIE = Nothing End Sub ----------------------- Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------------------------------------------ というコードなのですが 検索語の2ページ目は 「(株)京都ホテル【9723】:株式-株価 - Yahoo!ファイナンス」 というタイトルなのに 1ページ目と同じ 「Yahoo!ファイナンス - 株価やニュース、企業情報などを配信する投資・マネーの総合サイト」 が返ります。 なぜ次のページのタイトルが取得できないのでしょうか? 画面上IEブラウザには2ページ目が表示されています。

  • hiddenとなっているのは、VBAではキャッチで

    VBAのie操作で ソースが <input type="hidden" name="name" value="name"> のようにhiddenとなっているのは、VBAではキャッチできないのでしょうか? For Each myObj In objIE.document.all.tags("input") If myObj.Name = "name" Then End If Next が出来ないのは、hiddenだからでしょうか?

  • 検索ボタン押下時に、検索ボックスに入れた値が消える

    ie操作ですが、 検索ボックスに文字を入れて、検索ボタンを押すことは出来たのですが 検索ボタン押下時に、検索ボックスに入れた値が消えてしまい、結局何も検索ボックスに入れてない状態で検索されてしまいます。 検索ボックスに値を入れても文字の色が灰色です。 手作業で検索ボックスに文字を入れると黒で表示されます。 コードはこちらです。 Sub ヒトサラ() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://hitosara.com/" Do While objIE.Busy = True DoEvents Loop For Each myObj In objIE.Document.all.tags("input") If myObj.Name = "keyword" Then myObj.Value = "検索文字" Exit For End If Next For Each myObj In objIE.Document.all.tags("input") If myObj.alt = "検索" Then myObj.Click Exit For End If Next End Sub myObj.Value = "検索文字" これが間違ってる気がするのですが どのように修正すればよいでしょうか?

  • objIE.Document.all.tags("

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://oshiete.goo.ne.jp/" objIE.Visible = True Call IE_wait(objIE) objIE.Document.forms("center_searchform").elements("MT").Value = "教えて" For Each myObj In objIE.Document.all.tags("input") If myObj.alt = "検索する" Then objIE.Document.all.tags("input").alt("検索する").Click ‘ココでエラー End If Next Set objIE = Nothing End Sub これを実行するとクリックできないのですがなぜでしょうか? オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) が表示されます。 他の方法で解決する事は出来ますが、 If myObj.alt = "検索する" Then が出来てるからこのままうまく行きそうな気がするのですが? 理由を教えてください。ご回答よろしくお願いします。

  • 二つのタブを開き、二つ目のタブに対して、操作し

    vbaのie操作で 一つ目はタブはグーグルメール 二つ目のタブはドコモメールを開きたいのですが、 ドコモメールはPWをVBAで入れないと進めないので入れたいのですが Sub test() Dim myObj As Object Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") With objIE .Visible = True .Navigate "https://mail.google.com/mail/u/0/?pli=1#inbox" ’グーグル End With objIE.Navigate2 "https://mail.smt.docomo.ne.jp/mail/#fid=10000000&page=1", 2048 ’ドコモ For Each myObj In objIE.document.all.tags("input") If myObj.ID = "persistent" Then myObj.Value = "PW" Exit For End If Next Set objIE = Nothing End Sub だと、 For Each myObj In objIE.document.all.tags("input") は、グーグルメールを参照しています。 LocationURLを見てみたら、 "https://mail.google.com/mail/u/0/#inbox" になっていました。 このように、二つのタブを開き、二つ目のタブに対して、操作したい場合 どうすればいいでしょうか?

  • IE操作 ソース内のjavascriptを表示後、

    VBAでIE操作をしているのですが、 javascriptのURLを踏んだ後に、そのページをオブジェクトに格納して値の取得等をしたいのですが、 うまくいきません。 For Each myObj In objIE.document.all.tags("a") If myObj.href Like "*affiliateUrl1*" Then objIE.navigate myObj.href ' Call IE_wait Exit For End If Next 上記のコードで、 javascript:show_rakuten_linkcd('linkUrl1','imageUrl_S1','imageUrl_M1','title1','price1','reviewCount1','affiliateUrl1'); を見つけて、objIE.navigate myObj.href で、ページを表示することは出来たのですが、 Call IE_wait で Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub をすると、無限ループに入ります。 javascriptでページを表示させても、 objIEに格納されているURLは、javascriptを踏む前の元のページだからと思います。 なので、表示されるまで待つのは手動でやるとしたのですが、 その後、 For Each myObj In objIE.document.all.tags("testarea") If myObj.Name = "code" Then      ’ソース取得 End If Next とやろうとしても、objIEに格納されているURLがjavascriptで表示させているページでない為、 取得できません。 objIE.navigate myObj.href を実行した後に、javascriptのページ(小窓)を格納する方法があれば教えてください。 よろしくお願いします。

  • vba ie操作 ボタンを押したい

    こんばんは。度々すいません。 またまたIE操作で詰んでしまいました。 以前、http://hiroba.chintai.net/qa7798169.htmlで質問してご回答いただいたのですが 違うサイトにも応用しようとしたところ、うまくいきませんでした。 https://www.jaccs.co.jp/icmclub/icm_login.htmlのログインボタンを押下したいのですが Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://www.jaccs.co.jp/icmclub/icm_login.html" objIE.Visible = True Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then Debug.Print myObj.alt myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub をするとエラーにもならないけどボタンも押せません。 でもmyObj.Clickは通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

専門家に質問してみよう