UWSCからfirefoxやchromeを操作するための準備をしています。今回は、ブラウザ内にどのようなアイテムがあるのかを簡単に調べるためのデバッグ用の機能を作りました。
○firefoxやchromeを制御する関数群(準備五)
ポク太郎です。
UWSCでfirefoxやchromeの操作をしようとしています。今回はデバッグ、というか作成段階でアプリ内にどのようなアイテムがあるのかを素早く調べるための機能を作成しました。関数の形にしてありますが、独立したソフトウェアにしておくとよいと思います。
ブラウザを操作しようとしている方の目的は、メニューなどではなく、おそらく各ページ内部が操作対象だと思います。制御プログラムを作る際、“どのようなアイテムがあるのか”を知るのが第一歩になりますが、今回作成するのは、素早く簡単にアイテムのリストをファイルに保存する機能です。(アプリIDで指定する仕様にしたので、ブラウザ以外のアプリも同じように調べられます。)
——追記(FireFoxの制御に関して)
2017年10月初にFireFoxv56、11月中にv57Quantum(←爆速です)がリリースされました。
少し触ってみたところアクセスビリティの仕様が変更になっているようで、現状のUWSCでは制御できないようです。これはUWSCの対応待ちとなります。(対応するかどうかわかりませんが)
誤解を招いてはいけないので、こちら↓。
UWSCから操作しやすいのはIEやSleipnirですが、そんなの使いたくありません。UWSCでわざわざfirefoxやchromeを操作するのはよい選択肢とは思えませんが、敢えてイバラの道を進んでみます…。
【ご注意】今後、うまく行かず粉砕されるかもしれません。参考程度にどうぞ。
※1 以前からの記事の自作関数等が前提になっておりますので、意味不明な関数が出てきたらこちらを参照して下さい。
IDを渡してALL_ITEM_LIST[]を得る関数
1 2 3 4 5 6 7 8 9 | FUNCTION item(id,kind) IF (id<>–1) GETITEM(id,kind) RESULT=SLICE(ALL_ITEM_LIST,0,length(ALL_ITEM_LIST)–1) ELSE DIM x[0]=““ RESULT=SLICE(x,0,length(x)–1) ENDIF FEND |
1,9行目 | 1 9 | FUNCTION item(id,kind) FEND |
item(id,kind)関数宣言: 引数idのアプリの引数kindであるアイテムリスト(配列)を得る関数。 引数kindは、ITM_BTN、ITM_LINK、ITM_TABなどGETITEM関数で指定するアイテムの種別。 | ||
2,5,8行目 | 2 5 8 | IF (id<>–1) ELSE ENDIF |
アプリIDによる条件分岐 アプリが見つかった(id<>-1)⇒ 3、4行目を実行。 アプリが見つからなかった⇒ 6、7行目を実行。 | ||
3,4行目 | 3 4 | GETITEM(id,kind) RESULT=SLICE(ALL_ITEM_LIST,0,length(ALL_ITEM_LIST)–1) |
UWSC標準関数GETITEM(アプリID,種別)を実行することで特殊変数ALL_ITEM_LIST[]にアイテム名が代入される。 4行目で、ALL_ITEM_LIST[]を関数の戻り値として返します。([UWSC]配列変数と関数[使い方まとめ]参照。) | ||
6,7行目 | 6 7 | DIM x[0]=““ RESULT=SLICE(x,0,length(x)–1) |
こちらはアプリが見つからなかった場合。 ダミーの配列を準備し、それを関数の戻り値として返します。 |
配列を見やすい文字列に直す関数
1 2 3 4 5 6 7 8 | FUNCTION listup_item(item[]) r=“要素番号:アイテム名“ FOR i=0 TO ubound(item) r=r+chr(13)+FORMAT(i,5)+“:“+item[i] NEXT r=r+chr(13)+“======================== ↑“+t_stamp(2)+“に調査↑ ========================“ RESULT=r FEND |
1,8行目 | 1 8 | FUNCTION listup_item(item[]) FEND |
listup_item(item[])関数宣言: 引数item[](配列)を受け取り、見やすく表示するための文字列に作り変える関数。「要素番号:アイテム名」という各行の文字列が全要素繋がった文字列を作って返します。ファイルに見やすく保存するための関数です。 | ||
2行目 | 2 | r=“要素番号:アイテム名“ |
変数rの初期化。 関数の戻り値になる文字列を変数rとして作っていきます。 | ||
3~5行目 | 3 4 5 | FOR i=0 TO ubound(item) r=r+chr(13)+FORMAT(i,5)+“:“+item[i] NEXT |
3、5行を0~引数item[]の最大要素番号までループします。※ubound()はこちらの記事([UWSC]配列の最大要素を返す関数)で作成した自作関数。 4行目で、変数rに元々の変数rの内容にchr(13)(改行)を付け加え、FORMAT(i,5)(ループ変数iを5桁で表したもの)と”:”の後、引数item[i]を加えます。 | ||
6行目 | 6 | r=r+chr(13)+“======================== ↑“+t_stamp(2)+“に調査↑ ========================“ |
3~5行目のループが終わったら、データの最後であるということをわかりやすくするための印として、ソースのような棒線とタイムスタンプを付け加えておきます。 ※t_stamp(2)はこちらの記事([UWSC]日付時刻を文字列で返す関数)で作成した自作関数。タイムスタンプが不要ならこの行を棒線だけにして下さい。 | ||
7行目 | 7 | RESULT=r |
出来上がった文字列変数rを関数の引数として返します。 |
アプリ内にあるアイテムを調べる関数
関数の形にしてありますが、3~76行目だけを使用した独立のソフトにしてもいいと思います。(ただし、アプリIDの指定は忘れずに。)
4行目が長過ぎて表示しきれないので、詳細欄中の
select slctbox( ~ )
に書き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | FUNCTION inv_item(id) r=1 WHILE (0=0) ※長過ぎて表示できないので4行目は↓の説明枠で CASE –1 r=0 break CASE 1//“ITM_ACCCLK“ list=item(id,ITM_ACCCLK) file_save(“inv_ITM_ACCCLK.txt“,listup_item(list),1) CASE 2//“ITM_LINK“ list=item(id,ITM_LINK) file_save(“inv_ITM_LINK.txt“,listup_item(list),1) CASE 4//“ITM_BTN“ list=item(id,ITM_BTN) file_save(“inv_ITM_BTN.txt“,listup_item(list),1) CASE 8//“ITM_TAB“ list=item(id,ITM_TAB) file_save(“inv_ITM_TAB.txt“,listup_item(list),1) CASE 16//“ITM_EDIT“ list=item(id,ITM_EDIT) file_save(“inv_ITM_EDIT.txt“,listup_item(list),1) CASE 32//“ITM_LIST“ list=item(id,ITM_LIST) file_save(“inv_ITM_LIST.txt“,listup_item(list),1) CASE 64//“ITM_MENU“ list=item(id,ITM_MENU) file_save(“inv_ITM_MENU.txt“,listup_item(list),1) CASE 128//“ITM_TREEVIEW“ list=item(id,ITM_TREEVEW) file_save(“inv_ITM_TREEVEW.txt“,listup_item(list),1) CASE 256//“ITM_LSTVEW“ list=item(id,ITM_LSTVEW) file_save(“inv_ITM_LSTVEW.txt“,listup_item(list),1) CASE 512//“ITM_STATIC“ list=item(id,ITM_STATIC) file_save(“inv_ITM_STATIC.txt“,listup_item(list),1) CASE 1024//“ITM_STATUSBAR“ list=item(id,ITM_STATUSBAR) file_save(“inv_ITM_STATUSBAR.txt“,listup_item(list),1) CASE 2048//“ITM_TOOLBAR“ list=item(id,ITM_TOOLBAR) file_save(“inv_ITM_TOOLBAR.txt“,listup_item(list),1) CASE 4096//“ITM_ACCTXT“ list=item(id,ITM_ACCTXT) file_save(“inv_ITM_ACCTXT.txt“,listup_item(list),1) CASE 8192//“全部“ list=item(id,ITM_ACCCLK) file_save(“inv_ITM_ACCCLK.txt“,listup_item(list),1) list=item(id,ITM_LINK) file_save(“inv_ITM_LINK.txt“,listup_item(list),1) list=item(id,ITM_BTN) file_save(“inv_ITM_BTN.txt“,listup_item(list),1) list=item(id,ITM_TAB) file_save(“inv_ITM_TAB.txt“,listup_item(list),1) list=item(id,ITM_EDIT) file_save(“inv_ITM_EDIT.txt“,listup_item(list),1) list=item(id,ITM_LIST) file_save(“inv_ITM_LIST.txt“,listup_item(list),1) list=item(id,ITM_MENU) file_save(“inv_ITM_MENU.txt“,listup_item(list),1) list=item(id,ITM_TREEVEW) file_save(“inv_ITM_TREEVIEW.txt“,listup_item(list),1) list=item(id,ITM_LSTVEW) file_save(“inv_ITM_LSTVIEW.txt“,listup_item(list),1) list=item(id,ITM_STATIC) file_save(“inv_ITM_STATIC.txt“,listup_item(list),1) list=item(id,ITM_STATUSBAR) file_save(“inv_ITM_STATUSBAR.txt“,listup_item(list),1) list=item(id,ITM_TOOLBAR) file_save(“inv_ITM_TOOLBAR.txt“,listup_item(list),1) list=item(id,ITM_ACCTXT) file_save(“inv_ITM_ACCTXT.txt“,listup_item(list),1) SELEND SLEEP(0.01) WEND RESULT=r FEND |
1,78行目 | 1 78 | FUNCTION inv_item(id) FEND |
inv_item(id)関数宣言: 調べる“アイテムの種別”をユーザに選択させるダイアログを出し、引数idのアプリの指定されたもの全てを列挙してファイルに保存する関数。 | ||
2行目 | 2 | r=1 |
関数の戻り値を記憶するための変数rの初期化。 | ||
3,75~76行目 | 3 75 76 | WHILE (0=0) SLEEP(0.01) WEND |
無限ループです。休止期間0.01秒入れてあります。(今回の場合休止期間は不要ですが。) | ||
4~5,8, 11,14,17, 20,23,26, 29,32,35, 38,41,44, 47,74行目 | 4 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 74 | ※長過ぎて表示できないので4行目は↓の説明枠で CASE –1 CASE 1//“ITM_ACCCLK“ CASE 2//“ITM_LINK“ CASE 4//“ITM_BTN“ CASE 8//“ITM_TAB“ CASE 16//“ITM_EDIT“ CASE 32//“ITM_LIST“ CASE 64//“ITM_MENU“ CASE 128//“ITM_TREEVIEW“ CASE 256//“ITM_LSTVEW“ CASE 512//“ITM_STATIC“ CASE 1024//“ITM_STATUSBAR“ CASE 2048//“ITM_TOOLBAR“ CASE 4096//“ITM_ACCTXT“ CASE 8192//“全部“ SELEND |
4行目は↓です。 select slctbox(slct_btn,0,10,50,”アイテムを取得します。”, “ITM_ACCCLK”,”ITM_LINK”,”ITM_BTN”,”ITM_TAB”,”ITM_EDIT”, “ITM_LIST”,”ITM_MENU”,”ITM_TREEVIEW”,”ITM_LSTVIEW”, “ITM_STATIC”,”ITM_STATUSBAR”,”ITM_TOOLBAR”, “ITM_ACCTXT”,”全部”) UWSCの標準関数SELECTBOX(SLCT_BTN,,,,)はボタンが並んだダイアログを表示する関数です。第6変数以降は、ボタンに表示する文字列を列挙します。 ここではアイテムの種別をユーザに選ばせるダイアログボックスを表示しています。 押されたボタンによって5~47行目のように分岐します。 | ||
6~7行目 | 6 7 | r=0 break |
クローズボックスが押されたときの分岐先。 関数の戻り値として使用する変数rに0を代入してループを出ます。 UWSCの標準命令BREAK:ループを抜ける | ||
9,10行目 | 9 10 | list=item(id,ITM_ACCCLK) file_save(“inv_ITM_ACCCLK.txt“,listup_item(list),1) |
例として、9、10行目のみ説明します。(その他は同じなので) 上で作成したitem関数に引数idと“アイテムの種別”を渡し、ALL_ITEM_LIST[]を取得、配列listに代入します。 10行目のfile_save()関数は、こちらの記事([UWSC]ファイル操作の関数)で作成した自作関数。(文字化けするので最近修正しましたが。) file_save()関数にファイル名と上で作成したlistup_item(配列)関数の戻り値を追記モード(第3引数に“1”)を与えると、カレントディレクトリに追記モードで保存します。 | ||
77行目 | 77 | RESULT=r |
関数の戻り値として変数rを返します。(←全く意味のない戻り値だったw) |
動作確認
1 2 3 4 5 6 7 | brwz=“chrome“ path=“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe“ bstart(path) |
1,2行目 | 1 2 | brwz=“chrome“ path=“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe“ |
Cromeを立ち上げて使用するために変数brwz、変数pathをセットしています。 | ||
4~6行目 | 4 5 6 | bstart(path) id=bid(brwz) bprep() |
Cromeを起動し、そのIDを取得、Cromeのウィンドウをアクティブにしています。※これらの関数はこちらの記事([UWSC]firefoxやchromeを操作できるか試してみる関数)で作成した自作関数です。(Cromeの起動の方法について最近記事を修正しているので注意。) | ||
7行目 | 7 | inv_item(id) |
今回作成したinv_item(id)関数を呼び出します。 |
出てきたダイアログの「ITM_LINK」を押すと、ソースのあるディレクトリに「inv_ITM_LINK.txt」というファイルが出来上がります。それを開くと…、
要素番号:アイテム名 0:スクリーン リーダーをお使いの場合は、ここをクリックして Google インスタント検索をオフにしてください。 1:Gmail 2:画像 3:ログイン 4:音声で検索 5:プライバシー 6:規約 7:広告 8:ビジネス 9:Googleについて 10:スクリーン リーダーをお使いの場合は、ここをクリックして Google インスタント検索をオフにしてください。 11:Gmail 12:画像 13:ログイン 14:音声で検索 15:プライバシー 16:規約 17:広告 18:ビジネス 19:Googleについて ======================== ↑20170723_195748に調査↑ ======================== |
一応取得できたのですが、0~9がホントのリンク、10~19はそれを二重に取得しちゃってますね。これは現段階のUWSCの限界でしょうか。
Firefoxで試したところ0~9のホントのリンクだけ記録されていました。バージョンやブラウザ種によってこうなってしまうということは頭に入れておかないといけないみたいですね。(←これを考慮したプログラムを構築しないといけない。)
○firefoxやchromeを制御する関数群(準備五)
コメント