chrome拡張で某所のペア選択と購入額入力を行う

2014/0428

UWSCやら何やらを使って、某所の購入処理をカンタンにしていたんだけど、UWSCじゃ限界来たし、C#とかでwebbrowserObject使ったらメモリ漏れまくりで使い物にならんのでchrome拡張に移行した。
まああらかた普通に作って大丈夫なんだけど、イベントが絡む部分だけは、ちょっち面倒だったので、メモ書きしておく。
今はもっと効率よいコードを使っているのでコレは使っていない。

通貨ペアの選択

ドロップダウンボクス値だけを操作してもイベントが発生しないと選択されない。
イベント受取は、セレクトボックスの親divのさらに親divなので、そいつに対して、changeイベントを追加し発火してやる。

function setPair( Pair ) {
	try {
		var selectPair = document.getElementById( 'assets' );
		var optionsPair = selectPair.getElementsByTagName( 'option' );
		for( i = 0; i < optionsPair.length; i++ ) {
			if( optionsPair[i].innerText.trim() == Pair ) {
				selectPair.selectedIndex = i;
				break;
			}
		}
		var parentPair = selectPair.parentNode.parentNode;
		var _evt_change = document.createEvent( 'HTMLEvents' );
		_evt_change.initEvent( 'change', true, false );
		parentPair.dispatchEvent( _evt_change );
	} catch( e ) {
		throw '{ "code":"02031", "message":"Pair の選択時にエラーが発生しました。", "e":"' +  e + '" }';
	}
}

購入金額の入力

これもテキストボックスに入力するだけではダメで、適切にイベントを発火させないといけない。
面倒なのは、value書き換えてinputイベント、だけじゃダメな点。
ダミーで適当なキー入力を発生させ(カーソル左が妥当かと)、down、press、upも発生させてやるのがミソ。

function setLots( Lots ) {
	try {
		const KEY_LEFT = 37;
		const KEY_RIGHT = 39;
		const KEY_UP = 38;
		const KEY_DOWN = 40;
		var amount = document.getElementById( 'amount' );
		amount.value = Lots;
		var _evt_down = document.createEvent( 'KeyboardEvent' );
		var _evt_press = document.createEvent( 'KeyboardEvent' );
		var _evt_up = document.createEvent( 'KeyboardEvent' );
		var _evt_input = document.createEvent( 'HTMLEvents' );
		_evt_down.initKeyboardEvent( 'keydown', true, true, null, false, false, false, false, KEY_LEFT, 0 );
		_evt_press.initKeyboardEvent( 'keypress', true, true, null, false, false, false, false, KEY_LEFT, 0 );
		_evt_up.initKeyboardEvent( 'keyup', true, true, null, false, false, false, false, KEY_LEFT, 0 );
		amount.dispatchEvent( _evt_down );
		amount.dispatchEvent( _evt_press );
		amount.dispatchEvent( _evt_up );
	} catch( e ) {
		throw '{ "code":"02034", "message":"Lots の入力時にエラーが発生しました。", "e":"' +  e + '" }';

	}
}

ken-dan

この記事への、3 件のコメント

  1. P さんからのコメント:

    入院お疲れ様でした。って、お見舞い遅くなりました。

    これは、右上のBO用ですか?
    もしかして自動化してます?

  2. ken-dan さんからのコメント:

    Pちゃん毎度。
    見落としてますた。

    自動化はしてないです。あまり性に合わないので。

    チャートに上下2つのボタンオブジェクトを表示するインジを乗せて、
    それをクリックすると購入する、って仕掛けで使ってます。

    まあ、ボタンオブジェクトのクリックの替わりに、
    インジやEAでシグナル渡せば自動でやれるわけではありますが、
    やっぱり裁量が一番w

  3. 通りすがり さんからのコメント:

    throw文字列を、JSONにするという発想は無かった!
    目からウロコでしたので、思わずコメントしました。

コメント、お願いします。