システムメンテナンスのお知らせ

ジョルダンの乗換案内を、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 …
に進んでしまいます。

objIE.document.Links(0).Clickにしてもダメでした。

【質問2】
出発地、到着地の指定はできたのですが日時の指定ができません。
2012/08/01 8時00分をプルダウンに入れたいのですが、
objIE.document.allをどのようにすればいいのでしょうか?

ご教授よろしくお願いします。

ソースを見ると、
<script type="text/javascript">select_day();select_time();</script>
となっていて、nameがありません。

gooドクター

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

はじめまして。ご回答ありがとうございます。JavaScriptで処理しているからなのですね。

せっかくコードを頂いのですが.s.Clickの部分でエラーになり、ログインできませんでした・・・

お礼日時:2012/07/27 22:55

iwateryokou26さん


 
No2です。
すみません。前回はできたと思ったのですが…
以下の所を修正して試してください。

  .s.Click                 ' 検索クリック
       ↓
  objIE.document.all("S").Click   ' 検索クリック
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/15 22:33

わざわざ、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
に引数として渡せばいいかと思います。
    • good
    • 0
この回答へのお礼

なるほど~!そのような方法もあるのですね。

ひとつひとつ細かく説明していただいて助かります!さっそく試してみようと思います!
ありがとうございました。大変参考になりました。

お礼日時:2012/07/24 21:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング