IELINKアイイーリンク関数

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

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

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

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

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

使い方

UWSC
IFB IELINK(IE, "文字列") THEN
	// リンクをクリックできたときの処理
ELSE
	// リンクをクリックできなかったときの処理
ENDIF
UWSC
DIM i = 1
WHILE IELINK(IE, "文字列", i)
	// i個目のリンクをクリックできたときの処理
	i = i + 1
WEND

リンク文字列の指定方法

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

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

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

HTML
<a href="https://paypaymall.yahoo.co.jp">PayPayモール</a>
UWSC
IELINK(IE, "PayPayモール", TRUE)
IELINK(IE, "PayPay")
IELINK(IE, "モール")

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

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

HTML
<a href="http://news.yahoo.co.jp/pickup/6401161">
	<div>
		<div>
			<h1>
				<span>開始半年 総接種回数1億回超え</span>
			</h1>
			<span>
				<span>NEW</span>
			</span>
			<span>
				<span>1060</span>
			</span>
		</div>
	</div>
</a>

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

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

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

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

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

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

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

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

UWSC
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トップページで取得した例。

UWSC
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
<ul>
	<li><a href="https://www.ikyu.com/">一休.com</a></li>
	<li><a href="https://restaurant.ikyu.com/rsCosite.asp">一休.comレストラン</a></li>
</ul>

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

UWSC
IELINK(IE, "一休.com", 1)
IELINK(IE, "一休.com", 2)

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

UWSC
IELINK(IE, "一休.com", 1, TRUE)
IELINK(IE, "一休.com", 2, TRUE)

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

HTML
<a href="https://news.yahoo.co.jp/pickup/6401188/">盗み見防止 番号ないクレカ人気<span>942</span></a>

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

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

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

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

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

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

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

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

他の属性値で指定

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

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

HTML
<a href="" aria-label="動画で検索">動画</a>
UWSC
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属性)がわかっている場合
HTML
<a href="">
	<img decoding="async" src="http://example.com/img/uwsc.png" />
</a>
UWSC
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関数 (自作関数)関数を使います。

UWSC
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
HTML
<a href="">
	<img decoding="async" src="sunflower.png" alt="ひまわり" />
</a>
UWSC
altClick(IE, "ひまわり")

使い方

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

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

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

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

    UWSC
    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のトップページからショッピングのリンクをクリックする

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

IELINK(IE, "ショッピング")
BusyWait(IE)
使用関数

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

UWSC
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
[syntaxHighlight language="HTML"]
あなたは ゴールド会員 です
総保有ポイント
559
[/syntaxHighlight] [syntaxHighlight language="INI" title="楽天.INI"][楽天] ID=info@example.com PASS=*** [/syntaxHighlight]
結果
プレーンテキスト
ゴールド会員
559
使用関数