IELINK

Web上(IE)のリンクを選択します。正しく処理できた場合はTrue、処理できなかった場合はFalseを返します。

リンク文字列は完全一致・部分一致(前方一致、後方一致)いずれも指定可能です。

新しく開いたタブを操作したい場合は、getIEObj関数を使います。

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

リンク文字列の指定方法

リンク文字列は一部分でもクリックされます。

以下はYahoo! JAPANトップページにある「PayPayモール」のリンクをクリックする例。

aタグ内にある文字列をIELINKの第二引数に指定します。

PayPayモール
IELINK(IE, “PayPayモール”, TRUE)
IELINK(IE, “PayPay”)
IELINK(IE, “モール”)

リンク文字列全体を指定した場合、完全一致フラグをTrueにするのがおすすめです。

以下のようにタグが入れ子になっている場合は、タグ毎にひとかたまりとし、文字列を指定します。


	

開始半年 総接種回数1億回超え

NEW 1060

例えば上記のようなHTMLの場合、以下のいずれの書き方でもリンクを開くことができます。

IELINK(IE, “開始半年 総接種回数1億回超え”)
IELINK(IE, “NEW”)
IELINK(IE, “1060”)

「NEW」や「1060」は他と被り予期してないリンクが開く可能性があるので、他と被らないようなリンク文字列を指定するようにします。

タグをまたぐリンク文字列を指定することはできません。以下は失敗します。

IELINK(IE, “開始半年 総接種回数1億回超えNEW”)

リンク表示文字列を取得するプログラム

以下は指定したURLにある全リンクを取得し、IELINKに指定できる文字列を取得するプログラムです。

第三引数が「1」の場合、省略可能です。

SETHOTKEY(VK_ESC, EMPTYPARAM, “forceQuit”)

DIM IE = CREATEOLEOBJ(“InternetExplorer.Application”)
IE.Visible = TRUE
IE.Navigate(“http://example.com”)
BusyWait(IE)

HASHTBL string = HASH_SORT
elements = IE.document.getElementsByTagName(“a”)

DIM cnt = 0

FOR element IN elements
	FUKIDASI(cnt + “/” + (elements.length – 1))
	WITH element
		DIM array = SPLIT(.innerText, “<#CR>“)
		FOR item IN array
			string[item] = string[item] + 1
		NEXT
	ENDWITH
	cnt = cnt + 1
NEXT

DIM dummy = string[“”, HASH_REMOVE]
DIM res = “”

FOR i = 0 TO LENGTH(string) – 1
	res = res + “IELINK(IE, <#DBL>” + string[i, HASH_KEY] + “<#DBL>, ” + string[i, HASH_VAL] + “)<#CR>”
NEXT

DIM ID = EXEC(“notepad”)
SENDSTR(ID, res)

Yahoo! JAPANトップページで取得した例。

IELINK(IE, “「韓国選手が見当たらない」中継陣も当惑…閉幕式「韓国パッシング」論争”, 1)
IELINK(IE, “「真夏の大冒険」名実況の裏側”, 1)
IELINK(IE, “「人間の鎖」”, 1)
IELINK(IE, “「犯行は5、6年前から考えていた」小田急線内で10人切りつけ 36歳男の女性へのゆがんだ感情”, 1)
IELINK(IE, “『CDTVライブ!ライブ!夏フェス』第1夜出演者発表 Kis-My-Ft2、SixTONES、JO1、今市隆二ら11組”, 1)
IELINK(IE, “【MLB】大谷翔平出場試合で珍事 乱入者をボールガールが撃退、米称賛「教科書のようなテク」”, 1)
IELINK(IE, “【甲子園】東明館 守り勝って聖地初勝利だ「失点最小限に食い止めて」監督”, 1)
IELINK(IE, “【甲子園】日本航空のキーマンはヴァデルナ・フェルガス 豊泉啓介監督「失点…”, 1)
IELINK(IE, “【東京五輪】メキシコ代表、選手村でお土産“爆買い” 箸やTシャツなど購入「とても素敵なお土産ですね」”, 1)
IELINK(IE, “0:51”, 1)
IELINK(IE, “0:56”, 1)
IELINK(IE, “1”, 1)
IELINK(IE, “1191”, 1)
IELINK(IE, “13件の情報があります(17:05)”, 1)
IELINK(IE, “1512”, 1)
IELINK(IE, “1568”, 1)
IELINK(IE, “1日順延の甲子園開幕戦へ 米子東4元号での勝利へ「全員で戦っていきた…”, 1)
IELINK(IE, “2”, 1)
IELINK(IE, “2021年8月9日(月)”, 1)
IELINK(IE, “2138”, 1)
IELINK(IE, “3”, 1)
IELINK(IE, “335”, 1)
IELINK(IE, “4”, 1)
IELINK(IE, “5”, 1)
IELINK(IE, “516”, 1)
IELINK(IE, “65”, 1)
IELINK(IE, “8/9(月) 11:57”, 1)
IELINK(IE, “875”, 1)
IELINK(IE, “ABEMA TIMES”, 1)
IELINK(IE, “AERA dot.”, 2)
IELINK(IE, “ebookjapan”, 1)
IELINK(IE, “ENCOUNT”, 1)
IELINK(IE, “fall”, 2)
IELINK(IE, “FNNプライムオンライン”, 1)
IELINK(IE, “FRIDAY”, 3)
IELINK(IE, “GOAL”, 1)
…(中略)…
IELINK(IE, “野々村真”, 1)
IELINK(IE, “野々村真 コロナ”, 1)
IELINK(IE, “野々村真、コロナ重症化の瀬戸際で現在、絶対安静…妻・俊恵さん「両方の肺が真っ白で…」”, 1)
IELINK(IE, “利用規約”, 1)
IELINK(IE, “履き心地の良い「New Balance」”, 1)
IELINK(IE, “離婚発表…篠原涼子と市村正親が「理想の家族」だった頃”, 1)
IELINK(IE, “林葉直子 河村たかし市長に「人様のメダルをかじるのはどうかなぁ」”, 1)
IELINK(IE, “路線情報”, 1)
IELINK(IE, “話題のキーワードをもっと見る”, 1)
IELINK(IE, “櫻井よしこ”, 1)

完全一致フラグ

完全一致フラグとは、リンク表示文字列全体を指定してマッチしたときTrueになります。

上記のようなHTMLのとき、1つ目は「一休.com」がクリックされ、2つ目は「一休.comレストラン」がクリックされます。

IELINK(IE, “一休.com”, 1)
IELINK(IE, “一休.com”, 2)

しかし、第四引数の完全一致フラグをTrueにすると、1つ目は「一休.com」がクリックされますが、2つ目はリンク文字列の一部しか指定していないため失敗します。

IELINK(IE, “一休.com”, 1, TRUE)
IELINK(IE, “一休.com”, 2, TRUE)

タグの入れ子でリンク文字列がわかれているような場合、完全一致フラグは使えません。

盗み見防止 番号ないクレカ人気942

以下のいずれの書き方も失敗します。

IELINK(IE, “盗み見防止 番号ないクレカ人気942”, 1, TRUE) 
IELINK(IE, “盗み見防止 番号ないクレカ人気 942”, 1, TRUE)

この場合は部分一致で指定します。第四引数のFALSEは省略可能。

IELINK(IE, “盗み見防止 番号ないクレカ人気942”, 1, FALSE)

リンクをクリックする他の方法

<a>タグの属性値(id, class)で指定

id名
DIM element = IE.document.getElementById(id名)
element.click()
BusyWait(IE)
class名
DIM elements = IE.document.getElementsByClassName(class名)
DIM element = elements.Item(0)
element.click()

Itemの引数は0〜(elements.length-1)の間で指定。

他の属性値で指定

DIM element = IE.document.getElementsByTagName(“a”)
FOR element IN elements
	IFB element.getAttribute(属性値) = 値 THEN
		element.click()
		BusyWait(IE)
		BREAK
	ENDIF
NEXT

「aria-label」という属性で値が「動画で検索」の場合、以下のようになります。

動画
DIM element = IE.document.getElementsByTagName(“a”)
FOR element IN elements
	IFB element.getAttribute(“aria-label”) = “動画で検索” THEN
		element.click()
		BusyWait(IE)
		BREAK
	ENDIF
NEXT

画像

画像のURL(src属性)がわかっている場合

	
DIM element = IE.document.getElementsByTagName(“img”)
FOR element IN elements
	IFB element.getAttribute(“src”) = “http://example.com/img/uwsc.png” THEN
		element.click()
		BusyWait(IE)
	ENDIF
NEXT
alt属性がわかっている場合

全画像を取得・ループし要素を特定、もしくはaltClick関数を使います。

DIM elements = IE.document.Images

FOR i = 0 TO elements.length – 1
	WITH elements.Item(i)
		IFB .Alt = 値 THEN
			.click()
			BusyWait(IE)
			BREAK
		ENDIF
	ENDWITH
NEXT

	ひまわり
altClick(IE, “ひまわり”)

  1. 検索結果などのページングで「次へ」リンクがある限りループする書き方。

    REPEAT
    	// 処理
    	DIM flg = IELINK(IE, “次へ”)
    	BusyWait(IE)
    UNTIL !flg

    以下はGoogleの検索結果で「次へ」がある限りクリックし続ける例。

    ESCキーで強制終了します。

    SETHOTKEY(VK_ESC, EMPTYPARAM, “forceQuit”)
    
    DIM IE = CREATEOLEOBJ(“InternetExplorer.Application”)
    IE.Visible = TRUE
    IE.Navigate(“http://www.google.com”)
    BusyWait(IE)
    
    IESETDATA(IE, “UWSC”, “q”)
    IESETDATA(IE, TRUE, “btnK”)
    BusyWait(IE)
    
    REPEAT
    	SLEEP(3.000)
    	DIM flg = IELINK(IE, “次へ”)
    	BusyWait(IE)
    UNTIL !flg

プログラム実行例

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

DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://www.yahoo.co.jp")
BusyWait(IE)

IELINK(IE, "ショッピング")
BusyWait(IE)

//////////////////////////////////////////////////
// 【引数】
//   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 数値 : 取得したい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
			DIM t = GETTIME()
			REPEAT
				FOR n = 0 TO Shell.Windows.Count - 1
					TRY
						DIM 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
  1. script.function.CREATEOLEOBJ(1)
  2. com.IE.Visible(2)
  3. com.IE.Navigate(3)
  4. udf.BusyWait(4,7)
  5. script.function.IELINK(6)

楽天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(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 数値 : 取得したい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
			DIM t = GETTIME()
			REPEAT
				FOR n = 0 TO Shell.Windows.Count - 1
					TRY
						DIM 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
<div class="rank">
	あなたは
	<em>ゴールド会員</em>
	です
</div>

<dl class="point-total">
	<dt>総保有ポイント</dt>
	<dd>559</dd>
</dl>
[楽天]
ID=info@example.com
PASS=***
  1. script.function.CREATEOLEOBJ(1)
  2. com.IE.Visible(2)
  3. com.IE.Navigate(3)
  4. udf.BusyWait(4,13,17)
  5. com.IE.Document(9)
  6. dom.document.getElementsByClassName(9,21,26)
  7. dom.htmlcollection.length(11)
  8. script.function.IELINK(12)
  9. script.function.IESETDATA(14,15,16)
  10. dom.document.getElementsByTagName(22,27)
  11. script.syntax.control.print(23,27)
結果
ゴールド会員
559