VBAで操作するジョルダン乗換案内!詳細な方法とは?

このQ&Aのポイント
  • VBAを使用してジョルダンの乗換案内を操作する方法について教えてください。
  • 質問1では、検索ボタンがクリックされず詳細検索画面に進んでしまう問題が発生しています。
  • また、質問2では、日時の指定ができない問題があります。ソースを見ると、nameが存在しないことが分かります。
回答を見る
  • ベストアンサー

乗換案内 VBAで操作したい

ジョルダンの乗換案内を、VBAで操作したいのですが、詰んでしまいました・・・ Sub 乗換案内() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.jorudan.co.jp/" Const READYSTATE_COMPLETE As Long = 4 Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all("eki1").Value = "東京" objIE.document.all("eki2").Value = "品川" objIE.document.Forms(0).submit Set objIE = Nothing End Sub を実行してVBAでIE操作をしたいのですが、うまくできません。 【質問1】 objIE.document.Forms(0).submit はエラーにならないのですが、検索ボタンがクリックされず(検索結果は表示されず) 詳細検索画面 http://www.jorudan.co.jp/norikae/cgi/nori.cgi?rf=top&eok1=&eok2=&pg=0&eki1=%E6%9D%B1%E4%BA%AC&eki2=%E5%93%81%E5%B7%9D&Dym=201207&Ddd=24&Dhh=14&Dmn1=3&Dmn2=2&Cway=0&Csg=1 に進んでしまいます。 objIE.document.Links(0).Clickにしてもダメでした。 【質問2】 出発地、到着地の指定はできたのですが日時の指定ができません。 2012/08/01 8時00分をプルダウンに入れたいのですが、 objIE.document.allをどのようにすればいいのでしょうか? ご教授よろしくお願いします。 ソースを見ると、 <script type="text/javascript">select_day();select_time();</script> となっていて、nameがありません。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

iwateryokou26さん はじめまして。 以下のコードでできると思います。 > objIE.document.Links(0).Clickにしてもダメでした。 検索ボタンにも名前がついているので直接クリック命令をした方が良いと思います。 > 出発地、到着地の指定はできたのですが日時の指定ができません。 このエリアはJavaScriptで処理しているようで、HTMLには表示されません。 http://eki.jorudan.co.jp/com/js/com_v1.js?0301 を分析する必要がありますね。   Sub 乗換案内()  Const READYSTATE_COMPLETE As Long = 4  Dim objIE As Object    Set objIE = CreateObject("InternetExplorer.Application")  With objIE   .Visible = True   .Navigate "http://www.jorudan.co.jp/"   Do While (.Busy = True) Or (.ReadyState <> READYSTATE_COMPLETE)    DoEvents   Loop  End With      With objIE.document.all   .eki1.Value = "東京"  ' 出発地   .eki2.Value = "品川"  ' 到着地   .Dym.Value = 201208   ' 年月   .Ddd_slc.Value = 1     ' 日   .Dhh.Value = 8       ' 時   .Dmn1.Value = 0      ' 分(10分単位)   .Dmn2.Value = 0      ' 分( 1分単位)   .s.Click           ' 検索クリック  End With  Set objIE = Nothing End Sub

iwateryokou26
質問者

お礼

はじめまして。ご回答ありがとうございます。JavaScriptで処理しているからなのですね。 せっかくコードを頂いのですが.s.Clickの部分でエラーになり、ログインできませんでした・・・

その他の回答 (2)

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

iwateryokou26さん   No2です。 すみません。前回はできたと思ったのですが… 以下の所を修正して試してください。   .s.Click                 ' 検索クリック        ↓   objIE.document.all("S").Click   ' 検索クリック

iwateryokou26
質問者

お礼

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

回答No.1

わざわざ、VBAでそこまでしなくても、 フォームからhttp://www.jorudan.co.jp/norikae/cgi/nori.cgiにGETでデータ飛ばしてるだけなので、 VBAでURLを組み立ててあげれば良いと思いますが・・・。 http://www.jorudan.co.jp/norikae/cgi/nori.cgiの後に?を付けてパラメーターを連結するだけなので簡単です。 パラメータ名(フォームの部品のname属性)=値(フォームの部品のvalue属性)の形式で書きます。 複数のパラメータを送信する場合は、&で囲みます。 2バイト(日本語など)を送信する場合は、URLエンコード(%E6%9D%B1%E4%BA%ACなど)する必要があります。 VBAでURLエンコードするにはコチラを参照→http://bit.ly/PDLQ35 ざっとフォームを見てみると、URLのパラメータとフォームの対応は以下のようになっています。 http://www.jorudan.co.jp/norikae/cgi/nori.cgi?(このまま) eki1=出発地(URLエンコード)& eki2=到着地(URLエンコード)& eki3=経由駅(URLエンコード)& via_on=1&(このまま) Dym=年月(201207)& Ddd=日(1~31)& Dhh=時間(0~23)& Dmn1=十分(1~5)& Dmn2=一分(0~9)& Cway=検索種別(0:出発、1:到着、2:始発、3:終電)& C7=1&(このまま) C2=飛行機(0:おまかせ、1:使わない)& C3=高速バス(0:おまかせ、1:使わない)& C1=有料特急(0:おまかせ、1:使わない、2:100km以上なら使う)& C4=優先座席(0:指定席、1:自由席、2:グリーン席)& C6=乗換時間(0:短め、1:標準、2:余裕を持つ)& S=%E6%A4%9C%E7%B4%A2&(このまま) Cmap1=0&(このまま) rf=nr&(このまま) pg=0&(このまま) eok1=&(このまま) eok2=&(このまま) eok3=&(このまま) Csg=1(このまま) ※URLエンコードはエンコードが必要です。 ※このままは、必要なので変更せずに連結してください。 これをヒントにURLをVBAで生成するのが一番早いと思います。 文字列の連結だけですし。 できたURLを Sub 乗換案内(Url) Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate Url Set objIE = Nothing End Sub に引数として渡せばいいかと思います。

iwateryokou26
質問者

お礼

なるほど~!そのような方法もあるのですね。 ひとつひとつ細かく説明していただいて助かります!さっそく試してみようと思います! ありがとうございました。大変参考になりました。

関連するQ&A

  • vba IE操作 教えてgoo マイページ

    賃貸・タウン情報の「Q&A広場」 で教えてgooを使っているのですが 2個目のie_waitが機能しないというか意味がない状態になります。 ********************************************************** Sub test() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://hiroba.chintai.net/login?return_url=http%3A%2F%2Fhiroba.chintai.net%2Fmypage#tabs" Call ie_wait '1個目 objIE.Document.all("mailaddress").Value = "あああ" objIE.Document.all.Password.Value = "1111" objIE.Document.all.login_skip.Click objIE.Document.Forms(1).submit Call ie_wait '2個目 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 ********************************************************** 二個目のie_waitは、 ie_waitの操作が完了しないのに次のコードへ進んでしまいます。 一個目のie_waitは、 objIE.Navigate "http://hiroba.chintai.net/login?return_url=http%3A%2F%2Fhiroba.chintai.net%2Fmypage#tabs" が表示さえるのを待つコードですが、 objIE.Document.Forms(1).submitでログインして、マイページが表示されるまで待つには、 どのようなコードを入れればいいのでしょうか?

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

    ヤフーのトップページから 値を入れて検索を押すまではできるのですが 「ウェブ」ではなく「地図」で検索するにはどういう操作をすればいいのでしょうか? 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で教えてgooに自動ログインしたい

    Sub 教えてgoo() Dim objIE As Object Const READYSTATE_COMPLETE As Long = 4 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://login.mail.goo.ne.jp/id/authn/LoginStart?Site=oshiete.goo.ne.jp&Success=http%3A%2F%2Foshiete.goo.ne.jp%2F" Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all.all("uname").Value = "gooID" objIE.document.all.all("pass").Value = "gooPW" Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all("ログイン").Click End Sub --------------------------------------------------------- を実行してみても、 objIE.document.all.all("uname").Value = "gooID" objIE.document.all.all("pass").Value = "gooPW" objIE.document.all("ログイン").Click の部分がエラーになってしまいます。 教えてgooは、VBAでログインできないように規制されてるのでしょうか?

  • VBAでIE操作

    こんばんは。エクセル2003です。 証券会社にVBAでログインを試みてるのですができません。 ソースの一部を転記します。 <label for="account_id"><span>ユーザー名</span></label> <input type="text" tabindex="1" id="account_id" name="account_id" /> <label for="password"><span>パスワード</span></label> <input type="password" tabindex="2" id="password" name="password" /> <div id="rememberbox"> <label for="remember" id="rememberlabel">ユーザー名を記録する</label> <input type="checkbox" tabindex="3" name="remember" id="remember" /> </div> なので、下記VBAコードを作りました。 Sub IGマーケット証券() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.igmarkets.co.jp/login/" Do While objIE.Busy = True DoEvents Loop Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.Document.all("account_id").Value = "test" objIE.Document.all("password").Value = "test" objIE.Document.Forms(0).submit Set objIE = Nothing End Sub ですが、 objIE.Document.all("account_id").Value = "test" のところでエラーになってしまいます。 objIE.Document.all("login").Value = "test" に変えても同じです。 何がいけないのでしょうか? アドバイスよろしくお願いします。

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

    https://ca.omc-card.co.jp/member/omcplus_login.html のサイトにログインしたいのですが、ログインボタンが押せません。 ソースは、 ********************************************************************************** <FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value="">     ~~~省略~~~ <TABLE border="0" cellspacing="0" cellpadding="5" class="tab_button_bottom15"> <TR> <TD><A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A></TD> </TR> </TABLE> </FORM> ********************************************************************************** です。 --------------------------------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://ca.omc-card.co.jp/member/omcplus_login.html" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.forms(0).Item("sid_input").Value = "×××" objIE.Document.forms(0).Item("pw_input").Value = "×××" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop 'objIE.Document.forms(1).submit 'エラーになる objIE.Document.all.Item("document.form1").Click 'エラーになる objIE.Document.forms(0).getElementsByTagName("input")(0).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("input")(1).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("document.form1")(1).Click 'エラーになる objIE.Document.forms(1).getElementsByTagName("input")(1).Click 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------------------------------- テキストにIDとPWを入れるところまでは出来たのですが、 ログインボタンを押すことができません。 すいませんがご教授ご回答よろしくお願いしますm( )m

  • 乗換案内で表示されない

    今年の8月1日に青春18きっぷを使って 東京~大垣間をムーンライトながらに乗りたいのですが 乗換案内で表示されません。下記URLをご覧ください。 http://jorudan.co.jp/norikae/cgi/nori.cgi?eki1=%E6%9D%B1%E4%BA%AC&eki2=%E5%A4%A7%E5%9E%A3&eki3=&via_on=1&Dym=201208&Ddd=1&Dhh=23&Dmn1=1&Dmn2=0&Cway=0&C7=1&C2=0&C3=0&C1=1&C4=0&C6=2&Cmap1=0&rf=nr&pg=1&eok1=&eok2=&eok3=&Csg=1&S.x=78&S.y=20 ムーンライトながらは8/1は運行してないのでしょうか? 青春18きっぷは 【夏】発売期間:7月1日~8月31日 利用期間:7月20日~9月10日 で ムーンライトながらは http://hit.vis.ne.jp/nagara/timetable.html を見ると23時10分東京発です。 調べ方が間違っていますか? ご回答よろしくお願いします。

  • vba ie操作 ログインしたい

    いつもお世話になっております。 前回ご回答いただいた方ありがとうございました。 またまた困ったことにログインしたいサイトがあるのですがうまくできません。 URLはhttps://www.a-q-f.com/openpc/USB0100S01Action.do?aqf_id=S0000&send_url=https://www.a-q-f.com/&get_userInfo=&r=2941249539317530063 なのですが、ログインが二つあり、左側でログインしたいのですが、ボタンを押下できません。 **************************************************** Sub 永久不滅ドットコム() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "https://www.a-q-f.com/openpc/USB0100S01Action.do?aqf_id=S0000&send_url=https://www.a-q-f.com/&get_userInfo=&r=2941249539317530063" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.all.ID.Value = "test" objIE.Document.all.idPassword.Value = "test" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop 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 objIE.Document.Forms(0).Click '何も起こらない objIE.Document.Forms(0).Submit 'エラーになる Set objIE = Nothing End Sub **************************************************** をやってみましたが無理でした・・・ ご教授よろしくお願いします。

  • 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の操作→サブウインドウを操作するには

    以下の「oya.html」「ko.html」があります。 それを、VBAで「oya.html」を開き、「子ウインドウを開く」リンクをクリックさせて、開いた「ko.html」の「子ウィンドウを閉じる」リンクをクリックさせたいのだがどうすればよろしいでしょうか? ---------VBA ↓--------------------------------------------- Private Sub CommandButton1_Click() Dim objIE As Object 'Object型 'IEのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "file:///C:/oya.html"'「oya.html」を開く '----表示待ち↓-------- Do While objIE.Busy  DoEvents Loop Do While objIE.document.ReadyState <> "complete" DoEvents Loop '----表示待ち↑---------- For Each linkitem In objIE.document.all.tags("A") 'Aタグ If linkitem.innerText = "子ウインドウを開く" Then linkitem.Click End If Next '----表示待ち↓-------- Do While objIE.Busy DoEvents Loop Do While objIE.document.ReadyState <> "complete" DoEvents Loop '----表示待ち↑----------   For Each linkitem In objIE.document.all.tags("A") 'Aタグ If linkitem.innerText = "子ウィンドウを閉じる" Then linkitem.Click End If Next End Sub ---------------↑------------------------------------------- --------oya.html ↓----------------------------------------- <html> <head><script> function showModal(){ var value = showModalDialog('ko.html'); } </script></head> <TITLE>親ウィンドウ</TITLE> <body> <a href="javascript://" onclick="showModal()">子ウインドウを開く</a><br> </body> </html> -----------------↑----------------------------------------- --------ko.html ↓-------------------------------------------- <html> <TITLE>子ウィンドウ</TITLE> <body> <a href="#" onClick="window.close(); return false;">子ウィンドウを閉じる</a><br> </body> </html> ------------------↑-----------------------------------------

  • 無限ループ VBA IE操作

    VBAです。 とあるサイトで 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 が無限ループに陥ります。 中断して Exit Sub を入れてみましたが、抜けれません。 ページは既に表示済みです。 なぜ無限ループが抜けられないのか、 なぜページが表示されているのにこのコードが繰り返されるのか 何かわかる方よろしくお願いします。