EXITEXIT

EXITEXIT

スクリプトを終了する
EXITEXIT [終了コード]

スクリプトを終了させる

BREAKcontinueEXITなど、処理をとめたり、最初に戻したり、終わらせたりする制御文を説明しました。
この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

REPEAT-UNTIL,WHILE-WEND,FOR-NEXTループの先頭に戻る
CONTINUE [ループ数]

・ループ数・・・多重ループの場合に指定数だけのループの先頭に戻る。省略時は1

ループ中、一部の処理を飛ばしたいときは・・・

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

IELINK関数
Web上(IE)のリンクの選択 戻値 = IELINK( IE, リンク表示文字, [番号, 完全一致フラグ] )
引数
IE
IEオブジェクト
リンク表示文字
表示されているリンク項目(一部分だけでも可)
番号
リンク表示文字が同じ場合に順番指定
完全一致フラグ
Trueの時は完全に一致するものだけを(デフォルト:False)
戻値
TRUE:正常、 FALSE:処理不能

サンプルページのリンクを選択する

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関数
Web上(IE)にて指定タグのソースを取得
戻値 = IEGETSRC( IE, タグ名, [番号] )
引数
IE
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

REPEAT-UNTIL,WHILE-WEND,FOR-NEXTのループを中断する
BREAK [ループ数]

・ループ数・・・多重ループの場合に指定数だけのループを抜ける。省略時は1

ループを途中で中断しよう

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
エレメントのオブジェクト(フォーム、エレメントともにnに0からの数値を指定)
タイプ
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
フォームのオブジェクト(0からの数値を指定)
送信先
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
画像のオブジェクト(0からの数値を指定)
画像ファイル名
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関数
Web上(IE)に値を設定
戻値 = IESETDATA( IE, 値, Name, [Value, 番号] )
引数
IE
IEオブジェクト
設定する値
Name
値取得するエレメントのName
もしくはタグ名を記述: ”TAG=タグ名”
Value
ラジオボタン等で Nameが共通の場合に Valueを指定する
Nameにてタグ名が指定された場合は、そのタグにての順番を指定
番号
Name, Value が同じ場合に順番指定
戻値
TRUE:正常、 FALSE:処理不能

アンケートページにデータを自動入力してみる

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日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

このページの先頭へ