yahoo地図でソースを取得したい|VBAを使用して|

このQ&Aのポイント
  • yahooで地図を検索し、自分のブログやサイトに張り付けるためのソースを取得したい
  • ヤフーのトップページから住所を入力して地図を表示させることまでは出来たが、「この地図をブログ、サイトにはりつける」をクリックして、ソースを表示させ、取得することができない
  • VBAを使用して、<script type='text/javascript' charset='UTF-8' src='http://map.yahooapis.jp/MapsService/embedmap/V2/?cond=p%3A%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E4%B8%B8%E3%81%AE%E5%86%85%EF%BC%91%EF%BC%8D%EF%BC%99%EF%BC%8D%EF%BC%91%3Blat%3A35.68118548%3Blon%3A139.76875395%3Bei%3AUTF-8%3Bv%3A2%3Bsc%3A3%3Bdatum%3Awgs%3Bgov%3A13101055001%3Bz%3A18%3Bs%3A1407012295a3fac6d822a802dc26aec780294c76da%3Blayer%3Apl%3Bspotnote%3Aon%3B&amp;p=%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E4%B8%B8%E3%81%AE%E5%86%85%EF%BC%91%EF%BC%8D%EF%BC%99%EF%BC%8D%EF%BC%91&amp;zoom=18&amp;lat=35.68118548&amp;lon=139.76875395&amp;pluginid=place&amp;z=18&amp;mode=map&amp;active=true&amp;layer=place&amp;home=on&amp;hlat=35.68118548&amp;hlon=139.76875395&amp;pointer=off&amp;pan=off&amp;ei=utf8&amp;v=3&amp;datum=wgs&amp;width=480&amp;height=360&amp;device=pc&amp;isleft='></script>を取得したい
回答を見る
  • ベストアンサー

yahoo 地図 ソースを取得したい VBA

yahooで地図を検索し、自分のブログやサイトに張り付けるためのソースを取得したい ヤフーのトップページから住所を入力して地図を表示させることまでは出来たのですが、 「この地図をブログ、サイトにはりつける」をクリックして、ソースを表示させ、取得することができません。 Dim objIE As InternetExplorer Sub Sample() Dim myObj As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "http://www.yahoo.co.jp/" Call 待つ objIE.document.getElementById("csearch").Click objIE.document.forms(0).elements("p").Value = "千代田区丸の内1-9-1" objIE.document.forms(0).submit Call 待つ Set objIE = Nothing End Sub Sub 待つ() Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop End Sub ここまでは問題なくできます。 For Each myObj In objIE.document.all.tags("div") If myObj.ID = "urlBtn" Then objIE.navigate myObj.all(0).href Exit For End If Next これを入れることで、 「この地図をブログ、サイトにはりつける」 をクリックするのかな、と思いましたが、 objIE.navigate myObj.all(0).href を通過しても何も起こりません。 結果として、VBAで <script type='text/javascript' charset='UTF-8' src='http://map.yahooapis.jp/MapsService/embedmap/V2/?cond=p%3A%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E4%B8%B8%E3%81%AE%E5%86%85%EF%BC%91%EF%BC%8D%EF%BC%99%EF%BC%8D%EF%BC%91%3Blat%3A35.68118548%3Blon%3A139.76875395%3Bei%3AUTF-8%3Bv%3A2%3Bsc%3A3%3Bdatum%3Awgs%3Bgov%3A13101055001%3Bz%3A18%3Bs%3A1407012295a3fac6d822a802dc26aec780294c76da%3Blayer%3Apl%3Bspotnote%3Aon%3B&p=%E5%8D%83%E4%BB%A3%E7%94%B0%E5%8C%BA%E4%B8%B8%E3%81%AE%E5%86%85%EF%BC%91%EF%BC%8D%EF%BC%99%EF%BC%8D%EF%BC%91&zoom=18&lat=35.68118548&lon=139.76875395&pluginid=place&z=18&mode=map&active=true&layer=place&home=on&hlat=35.68118548&hlon=139.76875395&pointer=off&pan=off&ei=utf8&v=3&datum=wgs&width=480&height=360&device=pc&isleft='></script> を取得したいのですが、可能でしょうか? よろしくお願いします。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1に追加です。 ウィンドウを操作するのでアクティブにしたほうが良いですね。 2行目に以下を追加 Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long SendKeysでの操作前に以下を追加 SetForegroundWindow (objIE.hWnd) 追記 SendKeysなので「objIE.Visible = False」では動作しません・・・・。 待機時間の「Call Sleep(1000)」は適度にセットしてください・・・・。

FKJNSGWGHPU
質問者

お礼

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

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

Javascriptによりポップアップしたウィンドウへの操作が分からなかったので リンククリック後の処理はSendKeysで操作になりますが。 ■VBAコード Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Dim objIE As Object Dim buf As String Sub Sample() Dim myObj As Object '追加 Dim i As Integer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "http://www.yahoo.co.jp/" Call 待つ objIE.Document.getElementById("csearch").Click objIE.Document.forms(0).elements("p").Value = "千代田区丸の内1-9-1" objIE.Document.forms(0).submit Call 待つ 'リンクClick For i = 0 To objIE.Document.Links.Length - 1 If InStr(objIE.Document.Links(i).outerHTML, "URLのコピー") > 0 Then objIE.Document.Links(i).Click End If Next i '操作 Call Sleep(1000) SendKeys "^f", True SendKeys "この地図をブログ、サイトにはりつける", True SendKeys "{ENTER}", True SendKeys "{TAB}", True Call Sleep(1000) SendKeys "{TAB}", True Call Sleep(1000) SendKeys "^a", True SendKeys "^c", True Call Sleep(1000) objIE.Quit '表示 Call getCB MsgBox buf Set objIE = Nothing End Sub Sub 待つ() Do While objIE.busy = True DoEvents Loop Do While objIE.Document.readyState <> "complete" DoEvents Loop End Sub Sub getCB() 'Clipboardにあるテキストデータを取得 With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .GetFromClipboard buf = .GetText End With End Sub

参考URL:
http://www.ken3.org/vba/backno/vba170.html
FKJNSGWGHPU
質問者

お礼

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

関連するQ&A

  • 「地図」で検索するにはどういう操作をすればいいので

    ヤフーのトップページから 値を入れて検索を押すまではできるのですが 「ウェブ」ではなく「地図」で検索するにはどういう操作をすればいいのでしょうか? Sub yahoo() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop objIE.Document.forms(0).elements("p").Value = "東京" '‘「地図」をクリックする操作をしたい objIE.Document.forms(0).submit Set objIE = Nothing End Sub 宜しくお願いいたします。

  • VBAでソースの一番上から取得するには?

    Sub 取得() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.google.co.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Debug.Print objIE.Document.body.innerHTML Set objIE = Nothing End Sub これだと、 <DIVstyle="DISPLAY:none"id=cst></DIV><TEXTAREAstyle="DISPLAY:none" id=csi></TEXTAREA><SCRIPT>if(google.j.b)document.body.style.visibility='hidden';</SCRIPT> からしか取得されないのですが、 実際のソースを見ると <!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"> で始まってます。 VBAソースのてっぺんから取得する方法を教えてください。 innerHTML以外を使うのでしょうか?

  • vbaでdcmxにログインしたいのですが、

    https://cfg.smt.docomo.ne.jp/auth/cgi/anidlogin?rl=https%3A%2F%2Fi.mydocomo.com%2Foid%2Flg%2Flogin%3Fmode%3Dlogin%26return_to%3Dhttps%253A%252F%252Fwww1.dcmx.jp%252Fsdys%252Fsp%252Fopenid%252Fopenid_entry_input.do%26user_check%3D54cad3f373419a99d7830f9af7d22273c953e635c3a362c39338ab841078b1134f2dcd5104b0c9233fd98caf2ece0ca70000000000000000&si=0001&authif=1 のページなのですが ******************************************************* Dim myObj As Object Dim objIE As InternetExplorer Sub DCMX() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://cfg.smt.docomo.ne.jp/auth/cgi/anidlogin?rl=https%3A%2F%2Fi.mydocomo.com%2Foid%2Flg%2Flogin%3Fmode%3Dlogin%26return_to%3Dhttps%253A%252F%252Fwww1.dcmx.jp%252Fsdys%252Fsp%252Fopenid%252Fopenid_entry_input.do%26user_check%3D77016eccfd48449791dc76443259e46c30e0f39f25bc31902f48550e56b1176f73ec037e4b531368a8587aa1b5208c7d0000000000000000&si=0001&authif=1" Call IE_wait For Each myObj In objIE.document.all.tags("input") If myObj.Name = "authid" Then myObj.Value = "あああ@yahoo.co.jp" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.Name = "authpass" Then myObj.Value = "あああ" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.Name = "subForm" Then myObj.Click Exit For End If Next 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 ******************************************************* でログインボタンを押下でき、VBAではエラーにはならないのですが、 次のページで ******************************************************* エラー 大変申し訳ございません。 お探しのページまたはファイルが見つかりませんでした。(IN-E-1001) ******************************************************* となってしまいます。 DCMXではなく、 objIE.navigate "https://id.smt.docomo.ne.jp/cgi7/id/menu" のdアカウントなら問題なく次のページも表示されます。 なぜDCMXはエラーになってしまうのでしょうか?

  • 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は通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

  • vbaでyahooメールの受信メールの一覧を読み取

    vbaでyahooメールの受信メールの一覧を読み取る方法はありますか? Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://login.yahoo.co.jp/config/login?logout=1" 'ログアウトする Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "https://login.yahoo.co.jp/config/login?.src=&.pd=&.done=http%3A//www.yahoo.co.jp/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.all.UserName.Value = "" objIE.Document.all.passwd.Value = "" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.Forms(0).submit Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "http://jp.mc1003.mail.yahoo.co.jp/mc/welcome?.rand=6i0loli2li7s6&noFlush&YY=940152127#_pg=showFolder&fid=Inbox&order=down&tt=84&pSize=25&.jsrand=6381767" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.Body.innerHTML Set objIE = Nothing End Sub これでログインまではできるのですが、その後のソースを読み取っても受信メールの一覧は読み取れません。 ログイン後に、vbaではなく手動でWEBクエリをやってソースに書き出してみましたがやはり受信メールだけは読み取れません。 WEBクエリならフォルダの一覧は読み取れました。 VBAで読み取るのは不可能なのでしょうか?

  • サイトのソースのsubmitボタンの数を取得したい

    サイトのソースのsubmitボタンの数を取得したいのですが Sub test() Dim objIE As InternetExplorer Dim MyRow As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.coneco.net/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.all.tags("input").Type("submit").Count Set objIE = Nothing End Sub だとうまく動きません。 どう、変更すればよろしいですか?

  • 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でnanacoにログイン(ie操作)

    私は「緑のパスワードがなくnanacoをお持ちの方」です。 カード記載の番号にはvbaで値を入れることはできるのですが、 nanaco番号に値を入れることとログインボタンを押すことができません。 ********************************************** Sub nanaco() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop objIE.document.all("XCID").Value = "12345" objIE.document.all("SECURITY_CD").Value = "Password" For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub ********************************************** これだとまずall("XCID").Value でエラーになります。 ソースでは、 <input name="XCID" tabIndex="1" class="txtBoxLogin" accessKey="1" type="text" maxLength="16" value=""/> となっておりますが、同じコードが二つあるからエラーになるのでしょうか? all("SECURITY_CD").Value は問題なくできます。 ソースにも、SECURITY_CDは一つしかないです。 次にログインボタンも二つあるのですが、 For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next このコードを実行すると、多分上の方のログインボタンが押されてるようです。 なので、 Dim 二つ目 As Boolean For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then If 二つ目 = True Then myObj.Click Exit For End If 二つ目 = True End If End If Next に変更してみたのですが、 どうやら If myObj.alt = "ログイン" Then になるのは、1回しかないようです。 うーん、うまくできません。 ご教授よろしくお願いします。

  • vba ie操作 電気家計簿ログインできない

    いつもお世話になっております。 何度も質問して申し訳ございません。またまた教えてください。 電気家計簿(https://www.kakeibo.tepco.co.jp/dk/aut/login/)のログインボタンをVBAで押したいのですが うまくできません。 コードは下記の通りです。 ***************************************************************** Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.kakeibo.tepco.co.jp/dk/aut/login/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.all("id").Value = "test" objIE.Document.all("password").Value = "tset" 'objIE.Document.Forms(0).submit 'これだと更新されちゃうっぽい 'objIE.Document.Forms(0).Item(2).Click 'Item(0)とItem(1)はエラーにならないけど何も起こらない。Item(2)にするとエラー 'objIE.Document.all.submit.Click 'エラー 'エラーにならないけど何も起こらない 'For i = 0 To objIE.Document.Links.Length - 1 ' If objIE.Document.Links(i).innerHTML Like "*alt=ログイン*" Then ' objIE.Document.Links(i).Click ' Exit For ' End If 'Next i 'エラーにならないけど何も起こらない 'For Each myObj In objIE.Document.forms(0).all ' If TypeName(myObj) = "HTMLInputElement" Then ' If myObj.alt = "ログイン" Then ' myObj.Click ' Exit For ' End If ' End If 'Next Set objIE = Nothing End Sub ***************************************************************** 自分なりにいくつか試してみたのですが、うまくいきませんでした。 ご教授よろしくお願いします。

  • vba IE操作で こういう事ってできない?

    vba IE操作で こういう事ってできないのでしょうか? Dim objIE As InternetExplorer Sub test() Dim myObj As Object Dim myStr As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://employment.en-japan.com/search/search_list.cfm?area=23&startRow=1&m=1&job=100000" objIE.Visible = True Call iewait For Each myObj In objIE.Document.all.tags("a") If myObj.outerText = "詳細を見る" Then myObj.Click Call iewait Debug.Print objIE.LocationName objIE.GoBack Call iewait End If Next objIE.Quit Set objIE = Nothing End Sub Sub iewait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub このコードを実行して、 1ページ目の「詳細を見る」をクリックして、2ページ目のタイトルを抜き出し 1ページ目に戻り、次の「詳細を見る」をクリックして、2ページ目のタイトルを抜き出し・・・ と言う処理を繰り返したいのですが、 1回目のmyObj.Clickを通った後(Call iewaitの後かも?)に、 myObjの値が変数なしになってしまい、 2回目のIf myObj.outerText = "詳細を見る" Thenで 書き込みできません。(Error 70) になります。 1ページ目のリンクをクリックして、戻って また1ページ目のリンクをクリックして・・・ と言う処理をしたい場合どうすればよろしいでしょうか?

専門家に質問してみよう