BusyWait関数

本ページには広告が含まれています。

引数に指定したInternetExplorer オブジェクトの読み込みが完了するのを待ちます。

構文
BusyWait( IE )
引数
IE 必須
IEオブジェクト
戻り値

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   IE : IEオブジェクト
// 【戻り値】
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
	SLEEP(0.500)
	DIM t = GETTIME()
	TRY
		REPEAT
			DIM tm = GETTIME() - t
			FUKIDASI("BusyWait:" + tm)
			SLEEP(0.010)
			IF tm >= 60 THEN BREAK
		UNTIL !IE.Busy AND IE.readyState = 4
	EXCEPT
		IE = getIEObj(-1)
		PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
		BusyWait(IE)
	ENDTRY
	FUKIDASI()
FEND

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数)
//   values : 追加する要素をvalue1から指定
// 【戻り値】
//   処理後の配列の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i)  EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   needle : 検索する値
//   haystack : 配列
// 【戻り値】
//   needleが見つかった場合に配列のキー
//////////////////////////////////////////////////
FUNCTION arraySearch(needle, haystack[])
	DIM i = 0
	FOR item IN haystack
		IFB item = needle THEN
			RESULT = i
			EXIT
		ENDIF
		i = i + 1
	NEXT
FEND

//////////////////////////////////////////////////
// 【引数】
//   文字列 or 数値 : 取得したいInternetExplorer オブジェクトのタイトル・URLもしくは数値を指定
//   完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻り値】
//   条件に一致するInternetExplorer
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	DIM ShellWindows = Shell.Windows
	DIM IE[-1]
	FOR i = 0 TO ShellWindows.Count - 1
		TRY
			IFB ShellWindows.Item(i).Name = "Internet Explorer" THEN
				arrayPush(IE, ShellWindows.Item(i))
			ENDIF
		EXCEPT
		ENDTRY
	NEXT
	SELECT CHKNUM(str)
		CASE TRUE
			IFB str = 0 THEN
				RESULT = LENGTH(IE)
			ELSE
				IF str  FALSE;	num = arraySearch(pregGrep(pattern, titleList)[0], titleList)
				CASE pregGrep(pattern, urlList)  FALSE;		num = arraySearch(pregGrep(pattern, urlList)[0], urlList)
			SELEND
			TRY
				RESULT = IE[num]
			EXCEPT
				RESULT = ERR_VALUE
			ENDTRY
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式
//   truepart : 評価した式がTrueのときに返す値
//   falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
//   truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//   pattern : 検索するパターンを表す文字列
//   array : 検索される配列
// 【戻り値】
//////////////////////////////////////////////////
FUNCTION pregGrep(pattern, array[], flags = 0)
	DIM res[-1]
	FOR item IN array
		IF reTest(item, pattern) THEN arrayPush(res, item)
	NEXT
	RESULT = SLICE(res)
FEND

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列
//   Pattern : 正規表現で使用するパターンを設定
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻り値】
//   正規表現にマッチするかどうかを示すブール値
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列
//   multiplier : inputsを繰り返す回数
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前
//   dimension : 返す次元を示す整数
// 【戻り値】
//   配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND

解説

    2行目
    UWSC
    読み込み始める前にループを抜けるの防ぐための待機。
    3行目
    UWSC
    タイマー計測用の変数tを宣言。現在の時刻を代入。
    5-10行目
    UWSC
    		REPEAT
    			DIM tm = GETTIME() - t
    			FUKIDASI("BusyWait:" + tm)
    			SLEEP(0.010)
    			IF tm >= 60 THEN BREAK
    Webページが読込中、かつ、ドキュメントの読み込み状態が読み込み完了になるまで繰り返す。変数tからの経過時間を変数tmに代入し、吹き出しに表示。ページの読み込みが完了もしくは60秒以上経過でループを抜ける。エラー発生時は12行目>>>。
    12-14行目
    UWSC
    		IE = getIEObj(-1)
    		PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
    一番最後に開いたInternetExplorerオブジェクトを取得し、BusyWaitを再帰呼び出し。
    16行目
    UWSC
    吹き出しを消す。

読み込みが完了しない場合

  • 閲覧履歴やキャッシュを削除する。
  • 必要のないアドオンを無効にする。

特定のページの読み込みが遅い場合画像広告等の読み込みに時間が掛かっている場合があるので、広告ブロックのアドオン(AdBlockとか)を入れるのも効果があるかもしれません。

プログラム実行例

bodyタグを書き換える

Yahoo! JAPANトップページの特定の文字を赤太字にする。

UWSC
使用関数
解説(自動生成)

xmlのバージョンを取得する

UWSC
DIM IE = IEBoot()
IE.Navigate("http://uwsc.s1007.xrea.com/sitemap.xml")
BusyWait(IE)

PRINT IE.document.xmlVersion

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数)
//   values : 追加する要素をvalue1から指定
// 【戻り値】
//   処理後の配列の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i)  EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   needle : 検索する値
//   haystack : 配列
// 【戻り値】
//   needleが見つかった場合に配列のキー
//////////////////////////////////////////////////
FUNCTION arraySearch(needle, haystack[])
	DIM i = 0
	FOR item IN haystack
		IFB item = needle THEN
			RESULT = i
			EXIT
		ENDIF
		i = i + 1
	NEXT
FEND

//////////////////////////////////////////////////
// 【引数】
//   IE : IEオブジェクト
// 【戻り値】
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
	SLEEP(0.500)
	DIM t = GETTIME()
	TRY
		REPEAT
			DIM tm = GETTIME() - t
			FUKIDASI("BusyWait:" + tm)
			SLEEP(0.010)
			IF tm >= 60 THEN BREAK
		UNTIL !IE.Busy AND IE.readyState = 4
	EXCEPT
		IE = getIEObj(-1)
		PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
		BusyWait(IE)
	ENDTRY
	FUKIDASI()
FEND

//////////////////////////////////////////////////
// 【引数】
//   文字列 or 数値 : 取得したいInternetExplorer オブジェクトのタイトル・URLもしくは数値を指定
//   完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻り値】
//   条件に一致するInternetExplorer
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	DIM ShellWindows = Shell.Windows
	DIM IE[-1]
	FOR i = 0 TO ShellWindows.Count - 1
		TRY
			IFB ShellWindows.Item(i).Name = "Internet Explorer" THEN
				arrayPush(IE, ShellWindows.Item(i))
			ENDIF
		EXCEPT
		ENDTRY
	NEXT
	SELECT CHKNUM(str)
		CASE TRUE
			IFB str = 0 THEN
				RESULT = LENGTH(IE)
			ELSE
				IF str  FALSE;	num = arraySearch(pregGrep(pattern, titleList)[0], titleList)
				CASE pregGrep(pattern, urlList)  FALSE;		num = arraySearch(pregGrep(pattern, urlList)[0], urlList)
			SELEND
			TRY
				RESULT = IE[num]
			EXCEPT
				RESULT = ERR_VALUE
			ENDTRY
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   InPrivate : InPrivateブラウズ・モードを有効にするときはTRUEを指定
// 【戻り値】
//   InternetExplorerオブジェクト
//////////////////////////////////////////////////
FUNCTION IEBoot(InPrivate = FALSE)
	DIM IE
	SELECT InPrivate
		CASE TRUE
			DOSCMD("start iexplore -private")
			GETID("InPrivate - Internet Explorer - [InPrivate]", "IEFrame", -1)
			IE = GETACTIVEOLEOBJ("InternetExplorer.Application","InPrivate - Internet Explorer - [InPrivate]")
		CASE FALSE
			TRY
				IE = CREATEOLEOBJ("InternetExplorer.Application")
				IE.Visible = TRUE
			EXCEPT
				EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
				GETID("Internet Explorer", "IEFrame", -1)
				TRY
					IE = GETACTIVEOLEOBJ("InternetExplorer.Application")	
				EXCEPT
					IE = getIEObj(-1)
				ENDTRY
			ENDTRY
	SELEND
	RESULT = IE
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式
//   truepart : 評価した式がTrueのときに返す値
//   falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
//   truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//   pattern : 検索するパターンを表す文字列
//   array : 検索される配列
// 【戻り値】
//////////////////////////////////////////////////
FUNCTION pregGrep(pattern, array[], flags = 0)
	DIM res[-1]
	FOR item IN array
		IF reTest(item, pattern) THEN arrayPush(res, item)
	NEXT
	RESULT = SLICE(res)
FEND

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列
//   Pattern : 正規表現で使用するパターンを設定
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻り値】
//   正規表現にマッチするかどうかを示すブール値
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列
//   multiplier : inputsを繰り返す回数
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前
//   dimension : 返す次元を示す整数
// 【戻り値】
//   配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
結果
プレーンテキスト
1.0
使用関数
解説(自動生成)

[ファイルを開く]ウィンドウを表示

UWSC
結果
ファイルを開く
使用関数
解説(自動生成)

[Webページの保存]ウィンドウを表示

UWSC
結果
Webページの保存
使用関数
解説(自動生成)

[印刷]ウィンドウを表示

UWSC
結果
印刷
使用関数
解説(自動生成)

[印刷プレビュー]ウィンドウを表示

UWSC
結果
印刷プレビュー
使用関数
解説(自動生成)

[ページ設定]ウィンドウを表示

UWSC
結果
ページ設定
使用関数
解説(自動生成)

[プロパティ]ウィンドウを表示

UWSC
結果
プロパティ
使用関数
解説(自動生成)

GoBackとGoForwardを使った例

UWSC
使用関数
解説(自動生成)

Yahoo! JAPANトップページのメニューを取得

UWSC

[syntaxHighlight language="HTML"]

  • ショッピング
  • PayPayモール
  • ヤフオク!
  • PayPayフリマ
  • ZOZOTOWN
  • LOHACO
  • トラベル
  • 一休.com
  • 一休.comレストラン
  • ニュース
  • 天気・災害
  • スポーツナビ
  • ファイナンス
  • テレビ
  • 映画
  • GYAO!
  • ゲーム
  • Yahoo!モバゲー
  • ebookjapan
  • 占い
  • 地図
  • 路線情報
  • Retty
  • クラシル
  • 不動産
  • 自動車
  • TRILL
  • パートナー

[/syntaxHighlight]

結果
プレーンテキスト
使用関数
解説(自動生成)

気象庁のホームページから一月分の気温を取得しExcelでグラフを作成

UWSC
結果
使用関数
解説(自動生成)

歌ネットから歌詞を取得してテキストファイルに保存

UWSC
使用関数
解説(自動生成)

Yahoo! JAPANのトップページからショッピングのリンクをクリックする

UWSC
使用関数
解説(自動生成)

環境センサーから位置情報を取得し、Googleマップで表示

UWSC
使用関数
解説(自動生成)

楽天銀行定期預金の金利をExcelに保存

UWSC
使用関数
解説(自動生成)

楽天PointClubでランクと保有ポイント数を取得する

UWSC

[syntaxHighlight language="HTML"]

あなたは ゴールド会員 です
総保有ポイント
559

[/syntaxHighlight] [syntaxHighlight language="INI" title="楽天.INI"][楽天] [email protected] PASS=*** [/syntaxHighlight]

結果
プレーンテキスト
使用関数
解説(自動生成)

関連記事

IEGETFRAME関数 (スクリプト関数)
HTMLのiframeタグで埋め込まれたインラインフレームを取得します。
IESETDATA関数 (スクリプト関数)
ウェブ上に値を設定します。
IE.ExecWB メソッド
コマンドを実行します。
IE.GoForward メソッド
履歴リストの1つ後の項目に移動します。
IE.Refresh2 メソッド
指定されたリフレッシュレベルで現在表示されているファイルを再読み込みします。
IE.Stop メソッド
読込中のWebページやダウンロードのキャンセル、BGMやアニメーションの動的要素を停止します。
IE.Document プロパティ
ドキュメントオブジェクトを取得
getIEObj関数 (自作関数)
引数に指定したタイトルまたはURLを含むIEオブジェクトを返します。戻り値はInternetExplorerオブジェクトです。
IE.Navigate メソッド
URLまたは絶対パスで指定されたファイルを開きます。
IE.Left プロパティ
オブジェクトの左端の座標を取得または設定します。