UWSCというソフトを使ってWEB上ボタンを
選択したいと思っております。
操作したい先は、このリンクでデモ口座という
ボタンを押した先のです。
http://jp.demo.highlow.net/?lang=ja-JP
右上の通貨の選択リストを操作したいと思っておりますが
odtab = gid( ie, "assets")
odtab.Value="GBPJPY"
odtab.focus()
kbd( VK_DOWN, CLICK, 100 )
など試しましたがうまくいきません。
Valueでテキスト上では通貨の選択が出来るように
なったのですが、その後のイベントが発生しないため
サイトに変化が起こらないのです。
因みに、fireEvent("onChange")なども試してみたの
ですが、ダメでした。
また、For ~ To でキーボードダウンでリスト選択
させようとしても何故か上手く動きません。
類似質問があります。
http://q.hatena.ne.jp/1401323207#a1230483
現在稼働しません、踏まえた回答を
iMacrosなどの他のマクロソフトは、回答対象外です。
前と同じコードでちゃんと動いてるんですけどね・・・
(コメント欄を参照)
該当のデモのページを表示していて気になったのですが、ページ全体の表示が完了するまでのレスポンスがかなり悪いです。
SELECT タグの onChange ハンドラの登録も JavaScript でやっているようですし、UWSC のプログラムが動くタイミングが早すぎて onChange のハンドラが登録される前にクリックしてしまっているのではないでしょうか。
IE で navigate した後に極端なくらい長い時間 sleep させて動作を確認してみたらどうでしょうか。
// クイックデモにログインしていること
// アクセスしたいページのURL
url = "http://jp.demo.highlow.net/"
// 新規IEオブジェクトを作成
ie = createOLEobj("InternetExplorer.Application")
// 起動中のIEを見えるように
ie.visible = True
wid = hndtoid( ie.hwnd )
acw( wid )
// 対象ページを開く
ie.navigate( url )
ie_wait( ie )
// HIGH/LOWタブをクリック
odtab = gid( ie, "ChangingStrike")
odtab.click()
sleep( 3 )
// 通貨切り替えボックス内の何番目を押したいか(0番目から)
cur_index = 5
// ALL
// AUDJPY
// EURJPY
// GBPJPY
// USDJPY
// 通貨切り替えボックスを操作
// ※mouseupイベントなど複雑なので単純なクリックだけでは無理
cur_box = gid( ie, "assets")
cur_box.focus()
sleep( 0.5 )
for i = 0 to cur_index - 1
kbd( VK_DOWN, CLICK, 100 )
sleep( 0.5 )
next
KBD(VK_RETURN,CLICK,100)
sleep( 0.5 )
cur_box.blur()
// 該当する通貨のパネル部分を取得
panel = gid( ie, "carousel")
// パネルの中の要素を分析して表示
span_return_rate = tag_and_class( panel, "span", "returnRate" )
//msgbox( span_return_rate.innerText )
span_strike = tag_and_class( panel, "span", "strike" )
//msgbox( span_strike.innerText )
// HIGHボタンを押す
high_btn = gid( ie, "up_button" )
high_btn.click()
sleep( 2 )
// LOWボタンを押す
low_btn = gid( ie, "down_button" )
low_btn.click()
sleep( 2 )
// 量を入力
amount_box = gid( ie, "amount" )
amount_box.value = "10000"
sleep( 1 )
// 今すぐ購入
invest_btn = gid( ie, "invest_now_button" )
invest_btn.focus()
sleep( 1 )
KBD(VK_RETURN,CLICK,100)
sleep( 1 )
// プロセス中→Successと表示される
msgbox("完了")
// 以下は関数
// IEがビジー状態の間待ちます
procedure ie_wait( ie )
repeat
sleep( 0.1 )
until ( ! ie.busy ) and ( ie.readystate = 4 )
sleep( 0.2 )
fend
// getElementById
function gid( ie, dom_id )
result = ie.document.getElementById( dom_id )
fend
// タグ名とクラス名を指定して最初の1つだけ要素を返す
function tag_and_class( parent, tag_name, class_name )
tags = parent.getElementsByTagName( tag_name )
for i = 0 to tags.length - 1
ifb tags.Item( i ).getAttribute("class") = class_name then
result = tags.Item( i )
endif
next
fend