BusyWait

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

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

プログラム

////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND

「このWebページに問題があるため、Internet Explorerのタブを開き直しました」のメッセージが出るとInternetExplorerオブジェクトの値が変わるのかエラーになるため、対策を検討中…。

プログラム実行例

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

IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("http://yahoo.co.jp") BusyWait(IE) DIM element = IE.document.getElementById("ToolList") DIM elements = element.getElementsByTagName("li") FOR element IN elements PRINT element.textContent NEXT IE.Quit ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND
<div id="ToolList"> <ul> <li>ショッピング</li> <li>PayPayモール</li> <li>ヤフオク!</li> <li>PayPayフリマ</li> <li>ZOZOTOWN</li> <li>LOHACO</li> <li>トラベル</li> <li>一休.com</li> <li>一休.comレストラン</li> <li>ニュース</li> <li>天気・災害</li> <li>スポーツナビ</li> <li>ファイナンス</li> <li>テレビ</li> <li>映画</li> <li>GYAO!</li> <li>ゲーム</li> <li>Yahoo!モバゲー</li> <li>ebookjapan</li> <li>占い</li> <li>地図</li> <li>路線情報</li> <li>Retty</li> <li>クラシル</li> <li>不動産</li> <li>自動車</li> <li>TRILL <li>パートナー</li> </ul> </div>
結果
ショッピング
PayPayモール
ヤフオク!
PayPayフリマ
ZOZOTOWN
LOHACO
トラベル
一休.com
一休.comレストラン
ニュース
天気・災害
スポーツナビ
ファイナンス
テレビ
映画
GYAO!
ゲーム
Yahoo!モバゲー
ebookjapan
占い
地図
路線情報
Retty
クラシル
不動産
自動車
TRILL
パートナー

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

CONST ssfDesktop = 0 DIM IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("https://www.uta-net.com/song/280568/") BusyWait(IE) DIM element, elements, name, lyrics element = IE.document.getElementById("view_kashi") elements = element.getElementsByClassName("title") name = TRIM(elements.Item(0).innerText) element = IE.document.getElementById("kashi_area") lyrics = element.innerText IE.Quit DIM Shell = CREATEOLEOBJ("Shell.Application") DIM Folder = Shell.NameSpace(ssfDesktop) DIM path = Folder.Self.Path DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") path = uniqueFilename(FSO.BuildPath(path, name + ".txt")) DIM FID = FOPEN(path, F_READ OR F_WRITE) FPUT(FID, lyrics) FCLOSE(FID) ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND ////////////////////////////////////////////////// // 【引数】 // path : ファイルのパス // 【戻値】 // 重複しないファイル名 ////////////////////////////////////////////////// FUNCTION uniqueFilename(path) DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") IFB FSO.FileExists(path) THEN fol = FSO.GetParentFolderName(path) filename = FSO.GetBaseName(path) extension = FSO.GetExtensionName(path) i = 2 WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension)) i = i + 1 WEND RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension) ELSE RESULT = path ENDIF FEND

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

DIM IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE DIM latitude = SENSOR(SNSR_Location_Latitude) DIM longitude = SENSOR(SNSR_Location_Longitude) IE.Navigate("https://www.google.co.jp/maps/@" + latitude + "," + longitude + ",15z?hl=ja") BusyWait(IE) // 終了する // IE.Quit ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND

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

DIM IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("https://rbweb.rakuten-bank.co.jp/REF/main/fis/BasicTimeDepositInterestRate.html?PageID=BasicTimeDepositInterestRatePresentationLogicBean") BusyWait(IE) DIM elements = IE.document.getElementsByTagName("table") DIM element = elements.Item(0) DIM arr[-1][-1] getTableData(element, arr) IE.Quit DIM Excel = XLOPEN() XLSETDATA(Excel, arr, "A1") DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") DIM path = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "楽天銀行定期預金金利.xlsx")) XLCLOSE(Excel, path) ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND ////////////////////////////////////////////////// // 【引数】 // table : tableエレメント // arr : 取得したデータを格納する配列(参照引数) // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE getTableData(table, Var arr[][]) // 何行何列のテーブルか求める rowMax = table.rows.length - 1 colMax = 0 FOR row = 0 TO table.rows.length - 1 IFB table.rows(row).cells.length - 1 > colMax THEN colMax = table.rows(row).cells.length - 1 ENDIF NEXT // テーブルの値を格納するための2次元配列を作成 DIM arr[rowMax][colMax] // テーブルの値を格納 FOR row = 0 TO table.rows.length - 1 FOR col = 0 TO table.rows(row).cells.length - 1 n = 0 WHILE arr[row][col + n] <> "" n = n + 1 WEND arr[row][col + n] = table.rows(row).cells(col).innerText // rowSpan(行結合)とcolSpan(列結合)の両方があれば IFB table.rows(row).cells(col).rowSpan > 1 AND table.rows(row).cells(col).colSpan > 1 THEN rmax = table.rows(row).cells(col).rowSpan - 1 cmax = table.rows(row).cells(col).colSpan - 1 FOR r = 1 TO rmax FOR c = 1 TO cmax arr[row + r][col + c] = "←" NEXT NEXT ENDIF // rowSpan(行結合)があれば結合セルに「↑」を代入 IFB table.rows(row).cells(col).rowSpan > 1 THEN n = table.rows(row).cells(col).rowSpan - 1 WHILE n arr[row + n][col] = "↑" n = n - 1 WEND ENDIF // colSpan(列結合)があれば結合セルに「←」を代入 IFB table.rows(row).cells(col).colSpan > 1 THEN n = table.rows(row).cells(col).colSpan - 1 WHILE n arr[row][col + n] = "←" n = n - 1 WEND ENDIF NEXT NEXT FEND ////////////////////////////////////////////////// // 【引数】 // path : ファイルのパス // 【戻値】 // 重複しないファイル名 ////////////////////////////////////////////////// FUNCTION uniqueFilename(path) DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") IFB FSO.FileExists(path) THEN fol = FSO.GetParentFolderName(path) filename = FSO.GetBaseName(path) extension = FSO.GetExtensionName(path) i = 2 WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension)) i = i + 1 WEND RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension) ELSE RESULT = path ENDIF FEND

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

DIM IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("https://point.rakuten.co.jp/") BusyWait(IE) DIM elements // ログインする elements = IE.document.getElementsByClassName("name") IFB elements.length = 0 THEN IELINK(IE, "ログイン") BusyWait(IE) IESETDATA(IE, READINI("楽天", "ID", "楽天.INI"), "u") // ユーザID IESETDATA(IE, READINI("楽天", "PASS", "楽天.INI"), "p") // パスワード IESETDATA(IE, TRUE, "submit") // ログイン BusyWait(IE) ENDIF // ランク elements = IE.document.getElementsByClassName("rank") elements = elements.Item(0).getElementsByTagName("em") PRINT elements.Item(0).innerText // ポイント elements = IE.document.getElementsByClassName("point-total") elements = elements.Item(0).getElementsByTagName("dd") PRINT elements.Item(0).innerText IE.Quit ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND
あなたは ゴールド会員 です
総保有ポイント
559
[楽天] ID=info@example.com PASS=***
結果
ゴールド会員
559

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

DIM IE = IEBoot() IE.Navigate("http://uwsc.s1007.xrea.com/sitemap.xml") BusyWait(IE) PRINT IE.document.xmlVersion ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND ////////////////////////////////////////////////// // 【引数】 // 文字列 or 数値 : 取得したいIEオブジェクトのタイトル・URLもしくは数値を指定 // 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得) // 【戻値】 // Internet Explorerオブジェクト ////////////////////////////////////////////////// FUNCTION getIEObj(str, flg = FALSE) DIM Shell = CREATEOLEOBJ("Shell.Application") SELECT CHKNUM(str) CASE TRUE DIM cnt = 0 SELECT TRUE CASE str > 0 FOR n = 0 TO Shell.Windows.Count - 1 TRY IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1 IFB str = cnt THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF ENDIF EXCEPT ENDTRY NEXT CASE str < 0 FOR n = Shell.Windows.Count - 1 TO 0 STEP -1 TRY IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1 IFB ABS(str) = cnt THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF ENDIF EXCEPT ENDTRY NEXT CASE str = 0 FOR n = 0 TO Shell.Windows.Count - 1 TRY IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1 EXCEPT ENDTRY NEXT RESULT = cnt EXIT SELEND CASE FALSE t = GETTIME() REPEAT FOR n = 0 TO Shell.Windows.Count - 1 TRY targetObj = Shell.Windows.Item(n) IFB targetObj.Name = "Internet Explorer" THEN SELECT flg CASE TRUE IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF CASE FALSE IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN RESULT = Shell.Windows.Item(n) EXIT ENDIF SELEND ENDIF EXCEPT ENDTRY NEXT UNTIL GETTIME() - t >= 5 SELEND RESULT = ERR_VALUE FEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // InternetExplorerオブジェクト ////////////////////////////////////////////////// FUNCTION IEBoot() TRY IE = CREATEOLEOBJ("InternetExplorer.Application") EXCEPT EXEC("C:\Program Files\Internet Explorer\iexplore.exe") SLEEP(1.00) ENDTRY REPEAT TRY IE = GETACTIVEOLEOBJ("InternetExplorer.Application") EXCEPT IE = getIEObj(-1) ENDTRY UNTIL IE <> ERR_VALUE IE.Visible = TRUE RESULT = IE FEND
結果
1.0

この記事は役に立ちましたか?
役に立った 役に立たなかった