EXITEXIT
EXITEXIT
EXITEXIT [終了コード]
スクリプトを終了させる
BREAK、continue、EXITなど、処理をとめたり、最初に戻したり、終わらせたりする制御文を説明しました。
このEXITEXITはスクリプト自体を終了させてしまいます。
//たとえループ中でも終了 FOR A = 0 TO 10 PRINT A IF A = 2 THEN EXITEXIT NEXT //スクリプト終了のため、ここまでは到達しない MSGBOX("HELLO")
タグ
2012年7月31日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
EXIT
EXIT
EXIT
自作関数を途中で終了する場合
ループを途中で終了するにはBREAKを使いますが
自作関数を途中で終了する場合はEXITを使います。
//自作関数HELLOはあいさつ文を返す PRINT HELLO("CN") //但し、存在しないパラメーターを渡した場合は終了する FUNCTION HELLO(LANG="EN") HELLO = "UNKNOWN" SELECT LANG CASE "EN" HELLO = "Hello" CASE "JP" HELLO = "こんにちは" CASE "FR" HELLO = "Bonjour" DEFAULT EXIT SELEND //もしEXITがなければ最初に設定されたUNKNOWNが出る。けどもEXITで終了しているため出ない。 RESULT = HELLO FEND
再帰的な処理を表現してみよう
例えばある自作関数を宣言し、
その中で、その自作関数を再度呼び出します。
特に条件が無ければ、無限ループのように
ずっと再帰的に処理がされます。
ここで、終了条件とEXITを組み合わせて使い、
自作関数を完成させましょう。
スクリプトは以下のようになります。
タグ
2012年7月30日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
CONTINUE
CONTINUE
CONTINUE [ループ数]
ループ中、一部の処理を飛ばしたいときは・・・
BREAKの場合REPEAT-UNTIL,WHILE-WEND,FOR-NEXTのループを途中で抜けてしまいます。
そうではなく、一部の処理だけ飛ばし
またループの先頭に戻りたい場合はどうすればよいのでしょうか。
そんなときにCONTINUEを使います。
簡単な例を見てみましょう。
//通常"A=変数"は10まで出力されますが・・・ FOR A = 1 TO 10 //6の場合だけ、PRINTによる出力はしたくない、だけどループは続けたい IF A = 6 THEN CONTINUE PRINT "A=" + A NEXT
多重ループで、指定ループをCONTINUEさせたい場合は
CONTINUEの書き方で
CONTINUE [ループ数]と言う表現を記載しています。
例えば多重ループというループ文の中にループ文が入れ子にされた状態の場合
CONTINUEだけしか記載していない場合は、
記載してあるループ文で先頭に戻るだけです。
全ループの先頭に戻りたい、2つ上のループに戻りたい場合は
‘CONTINUE ループ数’という表現にしましょう。
2つの多重ループでサンプルをお見せします。
タグ
2012年7月29日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
IELINK
サンプルページのリンクを選択する
2種類のリンクをクリックする
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://canal22.org/sample0001/") BusyWait(IE) CTRLWIN(GETID("Sample0001"),MAX) MSGBOX("IELink(IE,<#DBL>あいさつの種類<#DBL>)<#CR>を実行します") IELink(IE,"あいさつの種類") BusyWait(IE) MSGBOX("IELinkによりリンクがクリックされ、<#CR>サイト内移動しました") MSGBOX("次は同じリンク文字の場合<#CR>2番目をクリックするパターンです") IELink(IE,"あいさつの種類",2) BusyWait(IE) //------ Procedure BusyWait(ie) repeat Sleep(0.2) until (! ie.busy) and (ie.readyState=4) Fend
解説
このサンプルを実行すると、
サンプルページの2つある「あいさつの種類」の上が先にクリックされ、
続いて「あいさつの種類2」がクリックされます。
リンク表示文字に限られていることから、簡易的に利用するには向いていますが、
確実なページ遷移を望む場合は、IE.Navigate(URL)のほうが良いでしょう。
また、画像リンクをクリックしたい場合は、『画像リンクをクリックしたい!』をご参照ください。 さらにボタン等の選択の場合は、IESETDATAを参照してください。
タグ
2012年7月28日 | コメントは受け付けていません。 |
カテゴリー:関数一覧
IEGETSRC
戻値 = IEGETSRC( IE, タグ名, [番号] )
サンプルページのソースを取得する
H2とBODYタグを取得
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://canal22.org/sample0006/") BusyWait(IE) H2 = IEGetSrc(IE, "h2") body = IEGetSrc(IE, "BODY") PRINT "h2:" + h2 PRINT "body:" + body //------ Procedure BusyWait(ie) repeat Sleep(0.2) until (! ie.busy) and (ie.readyState=4) Fend
解説
このサンプルを実行すると、
H2とBODYがタグから(ex:<h2>Sample0006</h2>)取得されるのが分かります。
この関数の用途としては、管理画面のデータなどを定期的に取得・保管しておきたい場合などに重宝します。
とくにアフィリエイターや広告代理店の方など、
たくさんの管理画面を扱う方は、
うまくすると、日々数時間かかっていた作業を
定時更新の自動化で対応できるかもしれません。
興味ある人はどしどし問い合わせてください。
※IEGETDATAで説明していますが、
IEGETDATAとIEGETSRCでは、値とソースの取得という違いがあるので、ご注意を!
タグ
2012年7月26日 | コメントは受け付けていません。 |
カテゴリー:関数一覧
BREAK
BREAK
BREAK [ループ数]
ループを途中で中断しよう
REPEAT-UNTIL,WHILE-WEND,FOR-NEXTは、条件を満たすまでは処理が繰り返されます。
しかし間にBREAKを入れることで、ループ終了条件前でもループを抜けることができるようになります。
簡単な例を見てみましょう。
//通常"A=変数"は100まで出力されますが・・・ FOR A = 1 TO 100 PRINT "A=" + A //50の場合はBREAKの一文により、途中でループは終了 IF A = 50 THEN BREAK NEXT
多重ループを全部抜けるには
BREAKの書き方で
BREAK [ループ数]と言う表現を記載しています。
例えば多重ループというループ文の中にループ文が入れ子にされた状態の場合
BREAKだけしか記載していない場合は、
記載してあるループ文が中断されるだけです。
全部のループを抜けたい、あるいは複数のループを抜けたい場合は
‘BREAK ループ数’という表現にしましょう。
3つの多重ループでサンプルをお見せします。
タグ
2012年7月26日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
IE.document.forms.elementsから取得できるエレメントの情報
IE.document.forms.elementsからエレメントの情報取得が行えます。
formsというフォームオブジェクトの中には
入力項目等を備えたelementsオブジェクトがあります。
テキストボックスやセレクトボックスなどの各入力項目から
以下のような情報が取得できます。
- エレメントの総数
- IE.document.forms[n].elements.length
- タイプ
- IE.document.forms[n1].elements[n2].type
- ※selectボックスは”select-one”と取得
- 名前
- IE.document.forms[n1].elements[n2].name
- 値
- IE.document.forms[n1].elements[n2].value
- チェック状態(true=チェック有り、false=チェック無し)
- IE.document.forms[n1].elements[n2].checked
- checkboxやradioボタンから取得します
- クラス名
- IE.document.forms[n1].elements[n2].className
- id
- IE.document.forms[n1].elements[n2].id
- uniqueID
- IE.document.forms[n1].elements[n2].uniqueID
- フォーカス順序(Tabでの移動順)
- IE.document.forms[n1].elements[n2].tabIndex
- タグ名
- IE.document.forms[n1].elements[n2].tagName
- クラス名
- IE.document.forms[n1].elements[n2].className
selectボックスはその中にoptionsオブジェクトがあり、
選択肢の情報を有しています。
- 選択されているインデックス
IE.document.forms[n1].elements[n2].selectedIndex
- 選択肢の数(elementsではselectボックスを選択)
IE.document.forms[n1].elements[n2].options.length
- 選択肢の表示名
IE.document.forms[n1].elements[n2].options[n3].text
- 選択肢の値
IE.document.forms[n1].elements[n2].options[n3].value
- 初期選択値か否か(true=初期選択値、false=初期選択値ではない
IE.document.forms[n1].elements[n2].options[n3].defaultSelected
- インデックス(0からの番号)
IE.document.forms[n1].elements[n2].options[n3].index
- 選択状態(true=選択されている、false=選択されていない)
IE.document.forms[n1].elements[n2].options[n3].selected
- チェックされているか(true=チェックされている、false=チェックされていない
IE.document.forms[n1].elements[n2].checked
- 初期状態でチェックされているか(true=チェックされている、false=チェックされていない
IE.document.forms[n1].elements[n2].defaultChecked
というわけで、
具体的にスクリプトを実行させて、結果を見てみましょう。
実行時のイメージ動画は下記の通りです。
IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = true IE.navigate("http://canal22.org/sample0005/") REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readystate = 4 FOR n = 0 TO (IE.document.forms.length -1) PRINT "<" + (n+1) + "目のフォーム><#CR>" PRINT "■エレメントの数:" + IE.document.forms[n].elements.length + "<#CR>" PRINT " エレメントのタイプと名前と値:<#CR>" PRINT " └(type) IE.document.forms[n].elements[i].type" PRINT " └(name) IE.document.forms[n].elements[i].name" PRINT " └(value) IE.document.forms[n].elements[i].value" PRINT " └(checked) IE.document.forms[n].elements[i].checked" FOR i = 0 TO (IE.document.forms[n].elements.length -1) PRINT " └(type:name) " + IE.document.forms[n].elements[i].type + ":" + IE.document.forms[n].elements[i].name PRINT " └(value) " + IE.document.forms[n].elements[i].value PRINT " └(className) " + IE.document.forms[n].elements[i].className PRINT " └(id) " + IE.document.forms[n].elements[i].id PRINT " └(uniqueID) " + IE.document.forms[n].elements[i].uniqueID PRINT " └(tabIndex) " + IE.document.forms[n].elements[i].tabindex PRINT " └(tagName) " + IE.document.forms[n].elements[i].tagName //セレクトボックスの情報を取得 IFB IE.document.forms[n].elements[i].type = "select-one" PRINT " └(selectedIndex) " + IE.document.forms[n].elements[i].selectedIndex FOR cin = 0 TO (IE.document.forms[n].elements[i].options.length - 1) PRINT " └(options.text) " + IE.document.forms[n].elements[i].options[cin].text PRINT " └(options.value) " + IE.document.forms[n].elements[i].options[cin].value PRINT " └(options.defaultSelected) " + IE.document.forms[n].elements[i].options[cin].defaultSelected PRINT " └(options.index) " + IE.document.forms[n].elements[i].options[cin].index PRINT " └(options.selected) " + IE.document.forms[n].elements[i].options[cin].selected NEXT ENDIF //チェックボックスの情報を取得 IFB IE.document.forms[n].elements[i].type = "checkbox" OR IE.document.forms[n].elements[i].type = "radio" PRINT " └(checked) " + IE.document.forms[n].elements[i].checked PRINT " └(defaultChecked) " + IE.document.forms[n].elements[i].defaultChecked ENDIF NEXT PRINT "<#CR>---------------<#CR>" NEXT
nameを指定するパターンでもOK
IE.document.forms[n1].elements[n2]と配列番号で指定していますが、
もちろんnameプロパティから取得した値でも指定可能です。
IE.document.forms[0].onamaeとやればname=onamaeとなっているオブジェクトを
指定可能です。
例えばラジオボタンのオブジェクトの場合、同名のものが複数あるケースが多いので
名前指定時にも配列番号で、細かく特定することができます。
以下のスクリプトで見てみましょう。
タグ
2012年7月24日 | コメントは受け付けていません。 |
カテゴリー:UWSCとInternetExplorer
IE.document.formsから取得できるフォームの情報
IE.document.formsからフォームの情報取得が行えます。
フォームと聞くと入力項目フォームが浮かびますが、
それらはformsオブジェクトの中にあるelementsオブジェクトの操作により触れるので、
次以降の記事で言及します。
テキストボックスやセレクトボックスなどのelementsの一つ上のformsオブジェクトから、
フォームの送信先やエンコード方式などの全般的な情報を取得できます。
- フォームの総数
- IE.document.forms.length
- 送信先
- IE.document.forms[0].action
- エンコード方式(1)
- IE.document.forms[0].encoding
- エンコード方式(2)
- IE.document.forms[0].enctype
- 送信形式
- IE.document.forms[0].method
- ターゲット
- IE.document.forms[0].target
というわけで、
具体的にスクリプトを実行させて、結果を見てみましょう。
実行時のイメージ動画は下記の通りです。
IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = true IE.navigate("http://canal22.org/sample0004/") REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readyState = 4 PRINT "フォーム総数" PRINT " IE.document.forms.length=" + IE.document.forms.length FOR A = 0 TO (IE.document.forms.length - 1) PRINT " " + (A+1) + "番目のフォーム" PRINT " 送信先" PRINT " IE.document.forms.action=" + IE.document.forms[A].action PRINT " エンコード方式(1)" PRINT " IE.document.forms.encoding=" + IE.document.forms[A].encoding PRINT " エンコード方式(2)" PRINT " IE.document.forms.enctype=" + IE.document.forms[A].enctype PRINT " 送信形式" PRINT " IE.document.forms.method=" + IE.document.forms[A].method PRINT " ターゲット" PRINT " IE.document.forms.target=" + IE.document.forms[A].target NEXT
resetとsubmitもして見ましょう
IE.document.forms[0].resetでフォームの各項目の入力値がリセット、
IE.document.forms[0].submitでサブミット、送信ができます。
スクリプトおよび実行時の動画は以下の通りです。
タグ
2012年7月23日 | コメントは受け付けていません。 |
カテゴリー:UWSCとInternetExplorer
IE.document.imagesから取得できる画像の情報
IE.document.imagesから画像の情報取得が行えます
- 画像数
- IE.document.images.length
- 画像ファイル名
- IE.document.images[0].nameProp
- 画像URL
- IE.document.images[0].src
- プロトコル
- IE.document.images[0].protocol
- ページ内タグ位置
- IE.document.images[0].sourceIndex
- ALT属性
- IE.document.images[0].alt
- TITLE属性
- IE.document.images[0].title
- 枠線
- IE.document.images[0].border
- class
- IE.document.images[0].class
- id
- IE.document.images[0].id
- name
- IE.document.images[0].name
- ユニークID
- IE.document.images[0].uniqueID
- 高さ
- IE.document.images[0].height
- 横幅
- IE.document.images[0].width
- 読込完了
- IE.document.images[0].complete
というわけで、
具体的にスクリプトを実行させて、結果を見てみましょう。
実行時のイメージ動画は下記の通りです。
IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate("http://canal22.org/sample0003/") REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readyState = 4 PRINT "■ページ内画像総数:" + IE.document.images.length FOR A = 0 TO (IE.document.images.length-1) PRINT " ▼画像" + (A+1) PRINT " 画像ファイル名:" + IE.document.images[A].nameProp PRINT " 画像URL:" + IE.document.images[A].src PRINT " プロトコル:" + IE.document.images[A].protocol PRINT " ページ内タグ位置:" + IE.document.images[A].sourceIndex PRINT " ALT属性:" + IE.document.images[A].alt PRINT " TITLE属性:" + IE.document.images[A].title PRINT " 枠線:" + IE.document.images[A].border PRINT " class:" + IE.document.images[A].className PRINT " id:" + IE.document.images[A].id PRINT " name:" + IE.document.images[A].name PRINT " ユニークID:" + IE.document.images[A].uniqueID PRINT " 高さ:" + IE.document.images[A].height PRINT " 横幅:" + IE.document.images[A].width PRINT " 読込状況:" + IE.document.images[A].complete PRINT " -----" NEXT
指定画像が出てきたらメッセージを出す
それでは、画像オブジェクトの情報を読み込みながら、条件分岐をして見ましょう。
ページにアクセスしていき、指定画像が出現したらメッセージを出します。
スクリプトは以下の通りです。
実行時のイメージ動画は下記の通りです。
タグ
2012年7月22日 | コメントは受け付けていません。 |
カテゴリー:UWSCとInternetExplorer
IESETDATA
戻値 = IESETDATA( IE, 値, Name, [Value, 番号] )
もしくはタグ名を記述: ”TAG=タグ名”
Nameにてタグ名が指定された場合は、そのタグにての順番を指定
アンケートページにデータを自動入力してみる
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://canal22.org/sample0006/") BusyWait(IE) IESetData(IE,"名前","name") // TEXT IESetData(IE,"アドレス","email") // TEXT IESetData(IE,True,"available","Yes") // RADIO IESetData(IE,True,"PC","Yes") // RADIO IESetData(IE,"コメントテスト","comment") // TEXTAREA //------ Procedure BusyWait(ie) repeat Sleep(0.2) until (! ie.busy) and (ie.readyState=4) Fend
解説
ごく単純なフォーム入力のスクリプトです。
最終的には、IESetData(IE,True,”submit”) // SUBMIT
このような構文で送信ボタンを押下します。
また、入力するデータ(ex:”名前”)は変数化することで、
毎回入力するデータを変更することも可能です。
勉強会では、これらを利用してログインの自動化を紹介します。
タグ
2012年7月21日 | コメントは受け付けていません。 |
カテゴリー:関数一覧