▽1
●
lang_and_engine ●1000ポイント ベストアンサー |
>WEB上にはSYMBOLが22個並んでおり、有る条件を満たすとPROBABILITYのデーターが出てきます。
>なお、データーはいろいろなシンボルについて同時に出たり出なかったり様々です。
画面上にはtableがあり,この表の1列目「SYMBOL」の値が「USDJPY」であるような行がある。
その行の3列目には,いつもPROBABILITYのデータが表示されているとは限らないが,
PROBABILITYのデータが表示されているタイミングもある。
もしUSDJPYのPROBABILITYの値が表示されていれば,その値を取得したい。
という事でよろしいですね。
下記のコードをどうぞ。
// アクセスしたいページのURL url = "http://name-of-this-site.org/coding/dummy/1387280635q/" // 新規IEオブジェクトを作成 ie = createOLEobj("InternetExplorer.Application") // 起動中のIEを見えるように ie.visible = True wid = hndtoid( ie.hwnd ) acw( wid ) // 対象ページを開く ie.navigate( url ) ie_wait( ie ) // まずテーブルを取得 tables = ie.document.getElementsByTagName("table") found_table = false target_table = empty // http://canal22.org/control/buitinconstant/ for i = 0 to tables.length - 1 ifb tables.item( i ).className = "alert-table" then // http://d.hatena.ne.jp/vividcode/20100327/1269724469 // [i]で参照しようとすると「次元数が合いません」のエラーになる // http://canal22.org/advance/ie/parent-child-ta/ //msgbox( "テーブルを発見" ) found_table = true target_table = tables.item( i ) endif next ifb found_table <> true then // http://mission-o.seesaa.net/article/121325919.html msgbox( "テーブルを発見できませんでした。" ) // 終了 exitexit endif // テーブルからデータを取得 trs = target_table.getElementsByTagName("tr") for j = 1 to trs.length - 1 // 先頭行はスキップして1から tds = trs.item( j ).getElementsByTagName("td") // SYMBOLを確認 ifb tds.item(0).innerText = "USDJPY" then // 該当行を発見 str = tds.item(2).innerText ifb pos( "%", str ) > 0 then // セルの中に「%」という文字があれば,データが表示されていると考える。 // http://uwsc.dohow.jp/blog/pos.html str_arr = split( str, " " ) // 半角スペースで分割する // http://canal22.org/kansu/split/ data1 = str_arr[0] data2 = str_arr[1] msgbox("データは" + data1 + "および" + data2 + "です。" ) // データ取得完了。取得したデータをもとに好きな処理をすればよい。 else msgbox("USDJPYの行にはデータがありませんでした。") // このメッセージを表示せずに,待機し続けてもよい。 endif endif next // IEがビジー状態の間待ちます procedure ie_wait( ie ) repeat sleep( 0.1 ) until ( ! ie.busy ) and ( ie.readystate = 4 ) sleep( 0.1 ) fend // コード全体の参考: // http://d.hatena.ne.jp/language_and_engineering/20090729/p1
このコードは実際に動作します。
この質問に回答するために,動作テスト用のページとして下記のURLを設置しました。
http://name-of-this-site.org/coding/dummy/1387280635q/
上のコードでは,ここにアクセスしてデータを取っています。
実際の利用時には,ご自分がアクセスするURLに変更して下さい。
また,データが表示されていない時には待機してから再度処理を試みる,
等の場合には,このコードの「テーブルを取得」以降の部分を定期的にループで回す事になります。