UWSCからfirefoxやchromeを操作するための準備をしています。今回は、URLを開いた後のブラウザが読み込み完了かどうかを調べる関数を作りました。
○firefoxやchromeを制御する関数群(準備四)
読込完了を制限時間付きで待つ関数(再)
ポク太郎です。
UWSCでfirefoxやchromeの操作をしようとしています。
以前粉砕された、ブラウザが読み込み完了かどうかを調べる関数を少しだけ改良します。
誤解を招いてはいけないので、こちら↓。
UWSCから操作しやすいのはIEやSleipnirですが、そんなの使いたくありません。UWSCでわざわざfirefoxやchromeを操作するのはよい選択肢とは思えませんが、敢えてイバラの道を進んでみます…。
【ご注意】今後、うまく行かず粉砕されるかもしれません。参考程度にどうぞ。
※1 以前からの記事の自作関数等が前提になっておりますので、意味不明な関数が出てきたらこちらを参照して下さい。
受信した文字数で判断
以前行った苦肉の策は、ブラウザの中止ボタンを画像認識。でも画像認識はできる限り避けるのが賢明です。何かいい方法は?と調べているうち、Yahoo!知恵袋にヒントがありました。
●ブラウザ中の文字情報をコピー→クリップボードの中身を得る
これで以前の関数を作り直したいと思います。
方法は、ブラウザ中の全文字を取得しながら、文字数をカウントし、取得した文字数が変化するかどうかを監視することで実現します。
そのために、以下の二つの関数を作成します。
「読込完了を制限時間付きで待つ関数(再)」
この方法でも以下は解決しませんが、画像違いによる動作不良はなくなります。
ブラウザ中の全文字を返す関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | FUNCTION b_gettxt() id=bid(brwz) bprep() SELECT brwz CASE “firefox“ SCKEY(id,VK_CTRL,VK_A,50) SCKEY(id,VK_CTRL,VK_C) CASE “chrome“ SCKEY(id,VK_CTRL,VK_A,50) SCKEY(id,VK_CTRL,VK_C) DEFAULT // とりあえず何もしない SELEND RESULT=GETSTR(0) FEND |
1,15行目 | 1 15 | FUNCTION b_gettxt() FEND |
b_gettxt()関数宣言:ブラウザ内部のテキスト情報を返す関数ブラウザに「すべてを選択」(Ctrl+A)と「コピー」(Ctrl+C)を送信し、クリップボードの内容を返すことで実現します。 | ||
2,3行目 | 2 3 | id=bid(brwz) bprep() |
この二つの関数は以前作成したブラウザのIDを調べる関数とブラウザに準備をさせる関数です。 | ||
4~5,8,11,13行目 | 4 5 8 11 13 | SELECT brwz CASE “firefox“ CASE “chrome“ DEFAULT SELEND |
ブラウザの種類によって操作を分岐するための部分。 ※現状はどちらのブラウザでも同じ操作です。 | ||
6,7,9,10行目 | 6 7 | SCKEY(id,VK_CTRL,VK_A,50) SCKEY(id,VK_CTRL,VK_C) |
2行目で得た変数id(ブラウザのアプリID)にそれぞれ以下を送信します。 6行目:CTRLキーとAキーを送信し、50ms待ちます。 | ||
14行目 | 14 | RESULT=GETSTR(0) |
関数の戻り値として、GETSTR(0)を返します。 UWSC標準関数:GETSTR() 引数に0を渡すことでクリップボードの内容を返します。 |
読込完了を制限時間付きで待つ関数(再)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | FUNCTION wait_ready_txt(limit,sec) st=GETTIME() mt=0 n0=0 IF LENGTH(b_gettxt())<100 SLEEP(0.3) ENDIF WHILE (mt<sec) mt=GETTIME()–st disp(“読込待ち(“+mt+“秒)“,“blue“) n1=n0 |
1,21行目 | 1 21 | FUNCTION wait_ready_txt(limit,sec) FEND |
wait_ready_txt(limit,sec)関数宣言:ブラウザの読み込み完了を待つ関数。(制限時間付き) 引数limit:必要な文字数。これより多く表示している場合は読込完了と判断。 引数sec:秒数を指定し、最大sec秒待つ仕様とする。 | ||
2~4行目 | 2 3 4 | st=GETTIME() mt=0 n0=0 |
変数の初期化。 変数st:開始した時刻を記憶 変数mt:経過時間記憶に使用 変数n0:上の関数で調べた文字数を記憶するために使用 | ||
5~7行目 | 5 6 7 | IF LENGTH(b_gettxt())<100 SLEEP(0.3) ENDIF |
ブラウザが表示を始まるまでの間休止させます。 上の関数b_gettxt()を使い文字数を調べ、100文字未満の場合0.3秒の休止期間を入れる。無駄な時間ですが仕方なし。 タブを開いた際に表示される文字は以下なので100文字と設定。(環境に合わせて調整して下さい。) FireFox: 新しいタブの設定 よく見るサイトを表示 おすすめサイトも表示 空白ページを表示 新しいタブの詳細 サムネイルを削除しました。 Chrome: Google 日本 Google を検索または URL を入力 「OK Google」と発声 この待ち時間の後、8行目から判定を行います。 | ||
8~10,17~19行目 | 8 9 10 17 18 19 | WHILE (mt<sec) mt=GETTIME()–st disp(“読込待ち(“+mt+“秒)“,“blue“) SLEEP(0.5) WEND disp(““,“blue“) |
ループ文:ループする条件は「指定された秒数が経過していない」条件が満たされる間、「読込待ち(何秒)」と吹き出しに表示されていきます。 ループを抜けたら、吹き出しを消します。 ※disp()関数はこちら([UWSC]情報の吹き出し表示とクリップボードへ転送する関数)で作成した自作関数。PRINT文でよければ、8行目を「PRINT “読込待ち(“+mt+”秒)”」と変更してください。 | ||
12~16行目 | 12 13 14 15 16 | n1=n0 n0=LENGTH(b_gettxt()) IF n0=n1 or n0>limit–1 break ENDIF |
ループ中、調べた文字数が変化していないか、また、引数limitを超えた文字数を受信していないかを調べる部分。 12行目:変数n1:前回調べた文字数を記憶するために使用。 13行目:LENGTH(A)は文字列Aの文字数を返すUWSCの標準関数。 14~16行目:条件に合致したら、ループを出ます。 | ||
20行目 | 20 | RESULT=1 |
関数の戻り値として1を返します。 |
○firefoxやchromeを制御する関数群(準備四)
読込完了を制限時間付きで待つ関数(再)
コメント