Help us understand the problem. What is going on with this article?

Yahoo!路線検索を自作ノンプログラミングツールでやってみた。

More than 1 year has passed since last update.

前回の記事で紹介した自作のノンプログラミングツールでYahoo!路線情報の検索をやってみました。

vbsめーかー

感想:結構バグたくさんあった。。。

自分でフロー作って実行してみて、バグたくさん見つかりました。
でも、デバッグしながら検証して、とりあえず今回紹介するシナリオ分くらいはちゃんと動くようになりました。

成果物と素材のサンプルはこちら

今回作るシナリオの流れ

1.ブラウザとBook.xlsxを起動してYahoo!路線情報を開く
2.出発地・到着地にBook.xlsxから取得した駅名を入力
3.検索をクリック
4.ページが読み込まれるのを待って、検索結果を取得
5.Book.xlsxに検索結果を張り付け
6.2~5を繰り返して表を埋める
7.ブラウザを閉じる
こんな感じになります。

Yahoo!路線情報

yahoo.png
このフォームを制御していきます。

事前準備:Excelブックを用意

step0.png
こんな感じで、出発地点と到着地点、検索結果が入る表をデスクトップに置いておく。
ファイル名はとりあえずテストだし、『Book.xlsx』で。

vbsメーカーに変数を定義する

var.png
(+)プラスボタンを押して行を追加したら、こんな感じに変数を入れておきます。
アクションのデフォルト変数名だとどれがどのデータだかわかんなくなっちゃうので。

シナリオのアクションを追加していく。

1.デスクトップのパスを取得

step1.png
とりあえず、BookPathに入れとく。

2.デスクトップに置いたBook.xlsxのフルパスを作る

step2.png
文字列結合のアクションを使って、さっきデスクトップのパスを入れたBookPathに"\Book.xlsx"を追加したものをBookPathに入れるようにしておく。

2.ブックを開く

step3.png
開いたブックへの参照がXlsxBook変数に設定される。

3.IEを起動してYahoo!路線情報を開く

step5.png

4.条件分岐から、For ...Nextを設定する

step4.png
カウンタ変数にxlsRow変数を設定して、今回は3行目から7行目に表を作ったので初期値3~終了値7で設定する。

5.Yahoo!路線情報へページ遷移する

step6.png
For文の中で繰り返ししたいから明示的なページ遷移も作っておく。

6.行列指定でエクセルから出発駅を取得

step7.png
For文のカウンタで行を指定して、S_EKI変数に出発駅を取得する。

7.行列指定でエクセルから到着駅を取得

step8.png
同じ要領で到着駅もE_EKIに取得する。

8.Yahoo!路線情報の出発駅にS_EKIを設定する

step9.png
F12でDOM要素確認したら、inputテキストボックスのidがsfromだったので、対象フォームには「input,type,text,sfrom」とキーワード指定してDOMオブジェクトを指定する。

9.同じく到着駅にE_EKIを設定する。

step8-2.png
同じ要領で到着駅の設定も追加する。
到着駅のinputテキストボックスはstoだったので、「input,type,text,sto」とする。

10.検索ボタンをクリック

step10.png
検索ボタンのidがserchModuleSubmitになっていたので、「input,submit,serchModuleSubmit」と指定する。

11.ページ読み込みを待機する

step11.png
クリックするとページ読み込みが入るので待機を入れる。

12.念押しでSleep待機を入れる

step11-2.png
ブラウザのReadyステータス待って値取得しようとするとエラー出ることがあったので、完全にロードが終わるのを待つためにSleep入れてみた。

13.検索結果の値を取得する。

step12.png
細かいエレメントにはあんまり一意のタグ付いてなくて指定しにくかったから、ちょっと広い枠のエレメントで指定してみた。
検索結果が表示されてるエリアのテキストをそのままCost変数にぶっこむ。

14.検索結果の取得値をエクセルに張り付け

step13.png
Cost変数を5列目のセルにぶっこむ。

15.並べ替え For ...Next(開始)(終了)の間に処理を入れる

step14.png
これで表の行数分、検索と結果貼り付けを繰り返してくれる。

16.ブラウザを閉じる。

step15.png

スクリプトとして保存する。

step15-2.png
今回、出来上がったフローはこんな感じ。
これで、保存するをクリックしてスクリプトとして保存する。

実行してみた結果。。。

step16.png
セル見切れてるけど、料金とかルート1~3が全て張り付けられています。
意外といい動きするじゃない♪

使ってみて気付いた課題点

・シナリオのボックス化したヤツに何の値・変数が設定されてたかいちいち編集開かなきゃわからないからプロパティウインドウ作った方がいいなーと感じた。
・DOM要素検索のFunctionの検索スピードが遅い。でもこれはフォームの簡素化の為にこーゆー機能にしたからしょーがないかなって気もしている。
・For ...Nextみたいな条件分岐要素の並べ替え判定がちょっとシビアすぎたかも。ドラッグ&ドロップ以外の並べ替え機能も検討してみよう。

今後の課題として精進します。。。

yizm
わんすけだよ。
https://yizm.work/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away