iMacrosではTAGコマンドでHTMLタグを選択します。TAGコマンドでタグを指定する方法はPOSとXPATHの二つです。このどちらかを使って、例えばリンクをクリックしたり、テキストやインプットボックスを選択したりすることができます。今回はPOSでタグを選択する方法を見てみましょう。少し長いですが、TAGコマンドはiMacrosで必須ですのでぜひ最後まで見てくださいね。
POSの使い方
まずTAGコマンドは以下のように使います。FROMのように [ ] で囲まれているところはオプションで、必須ではありません。
1 |
TAG POS=n TYPE=type [FORM=form] ATTR=attr [CONTENT=content] |
使い方は実際にiMacrosを動かしながら確認してみましょう。
では、例としてはてなブックマークのランキングをクリックするiMacrosでPOSの使い方をみてみます。
操作の記録
はてなブックマークのランキングは、1位から順番に並んでいますね。以下の動画のように、iMacrosで動作を記録しながら1位のリンクをクリックしてみましょう。記録したiMacrosファイルを実行すると、動作を記録出来ていることが分かりますね。
プログラムの確認
記録された動作は “#Current.iim” のiMacrosファイルに記録されています。このファイルを開いて確認すると、以下のようなプログラムが記録されています。
1 2 3 4 5 |
VERSION BUILD=9030808 RECORDER=FX TAB T=1 URL GOTO=http://b.hatena.ne.jp/ranking TAG POS=1 TYPE=A ATTR=TXT:2017年の「はてなブックマーク年間ランキング」トップ100<SP>わずか5日間でランクインした記事も<SP>-* TAB T=2 |
3行目に はてなブックマークのランキングサイト を読み込む “URL” コマンドがあり、4行目にPOSを使ったTAGコマンドがあります。TAGコマンドはサイトの要素を選択するコマンドです。ここで言う選択とは、マウスでサイトのどこかをクリックすることと同じです。
今回はリンクのタグ <a>を選択したので、TAGコマンドのTYPEがAになっています。
また、選択したリンクのテキストが “2017年の「はてなブックマーク年間・・・” とあるので、ATTRがTXT:2017年の・・・となっています。このATTRとはattribute:属性のことですね。
タグの確認
実際に選択したリンクのタグをFirefoxの開発ツールで確認しましょう。方法は以下の動画で確認してください。開発ツールの選択ツールで1位のリンクをクリックすると、その部分のタグが開発ツールに表示されます。
選択したタグの情報は下の様になっていました。記録されたリンクを選択するiMacrosのプログラムは赤字で示している情報を使っていることが分かりますね。
<a href=”http://hatenanews.com/articles/2017/12/26/150000″ class=”entry-link” title=”2017年の「はてなブックマーク年間ランキング」トップ100 わずか5日間でランクインした記事も – はてなニュース” data-entryrank=”1″ data-track-click-target=”direct”>2017年の「はてなブックマーク年間ランキング」トップ100 わずか5日間でランクインした記事も – はてなニュース</a>
では “POS” は何かですが、POSとはPositionのことで位置を示しています。何の位置かというと、TYPEとATTRで特定したタグの位置です。
ということで、記録された以下のTAGコマンドはAタイプで “2017年の・・・”のというテキストがあるタグの1番目を選択するというという意味になります。
1 |
TAG POS=1 TYPE=A ATTR=TXT:2017年の「はてなブックマーク年間ランキング」トップ100<SP>わずか5日間でランクインした記事も<SP>-* |
ちなみに “POS=2” とすると、以下の様なエラーでマクロが停止します。これは、TYPEとATTRで特定されるタグは一つしかないからです。ものTYPEとATTRで特定されるタグが複数ある場合、POSの番号は、そのタグの上から順番になります。
element A specified by TXT:2017年の「はてなブックマーク年間ランキング」トップ100<SP>わずか5日間でランクインした記事も<SP>-* was not found, line: 4 (Error code: -921)
他の指定方法でクリックしてみよう
それでは1位のリンクの選択を他の書き方(指定方法)で行ってみましょう。
まずリンクなので、”TYPE=A” ですね。これは変わりません。
変化させるところはATTRの部分です。開発ツールで表示させたタグの情報を見ると、TXT以外に以下の様に5つATTRで指定できる候補があります。
- href
- class
- title
- data-entryrank
- data-track-click-target
では、”data-entryrank” を使って1位のリンクを選択してみましょう。書き方はタグで ‘ = ‘と書いてるところを ‘ : ‘に変えて ” “の内容を右側に書きます。
1 |
TAG POS=1 TYPE=A ATTR=data-entryrank:1 |
classを使った場合の書き方は以下ですね。
1 |
TAG POS=1 TYPE=A ATTR=class:entry-link |
titleを使った場合の書き方は以下のようにできます。最後の ‘ * ‘(アスタリスク)はワイルドカード、トランプのジョーカーのような役割で何にでもなるということです。つまり、” 2017年の「* ” と書いても ” 2017年* “と書いても、他にtitle属性を持つタグでtitleが “2017年”というものがなければ同じタグが指定されます。
1 |
TAG POS=1 TYPE=A ATTR=title:2017年の* |
2位、3位のリンクをクリックしてみよう
では2位と3位のタグを開発ツールで確認してみましょう。開発ツールの使い方は動画を参考にしてくださいね。
テキスト、href、titleの値は1位、2位、3位が全て違うので、これで指定するのは少し面倒です。また、はてなブックマークランキングは週毎にこの値が変わります。本記事は2018年1月3日に書いていますので、たまたまテキストの値が「2017年の・・・」となっているのですね。そこで class と data-entryrank の二つで2位と3位のタグを選択してみましょう。
classを使う場合
タグのclass属性は2位と3位でも、”class=entry-link” となっていますね。この場合、同じ属性値で違う場所を選択するのでPOSの値を変更します。
2位を選択するiMacrosコマンドは以下のように “POS=2” とします。
1 |
TAG POS=2 TYPE=A ATTR=class:entry-link |
3位を選択するiMacrosコマンドは以下のように “POS=3” とします。
1 |
TAG POS=3 TYPE=A ATTR=class:entry-link |
data-entryrankを使う場合
タグのdata-entryrankの場合、2位と3位で値が違いますね。2位の場合 data-entryrank=”2″ で、3位の場合 data-entryrank=”3″ となっているので、この値を使いましょう。この属性値を持つ同一のタグはないので、POS=1とします。
2位を選択するiMacrosコマンド
1 |
TAG POS=1 TYPE=A ATTR=data-entryrank:2 |
3位を選択するiMacrosコマンド
1 |
TAG POS=1 TYPE=A ATTR=data-entryrank:3 |
10位まで連続してクリックしてみよう
ではJavascriptと連携させて10位まで連続してクリックしてみましょう。
リンクをクリックすると新しいタブでサイトの読み込まれるので、元のランキングサイトへ移動するようにします。タブの移動には “TAB T=n “です。nは、iMacrosの実行する時のタブを1として右のタブへ行く毎に1加算されます。つまり、一つ右へいくなら “TAB T=2″と書きます。元のタブに戻るには”TAB T=1″とします。このTABコマンドはマイナスはサポートしていないのでご注意ください。
ではPOSを使って10位までクリックしましょう。プログラムはこんな感じですね。JavascriptとiMacrosを連携させる方法はこちらの記事を見てくださいね。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var macro = "CODE:"; macro += "URL GOTO=http://b.hatena.ne.jp/ranking \n"; iimPlay(macro); for(var i = 1; i <= 10; i++) { var macro = "CODE:"; macro += "TAB T=1 \n"; macro += "TAG POS=" + i + " TYPE=A ATTR=class:entry-link \n"; macro += "WAIT SECONDS=2 \n"; macro += "TAB T=1 \n"; iimPlay(macro); } |
1、2行目ではてなブックマークランキングのサイトを表示させます。
POSの値を1位から10位まで変更するので、繰り返しのFOR文を使います。FOR文の繰り返しに使用する変数 i をPOSの値に設定します。9行目のように、文字列に変数 i を連結させるとPOSの値に i を使うことができます。
はてなブックマークのランキングのサイトでiMacrosのプログラムを実行するので、ここがTAB T=1となります。9行目のTAGコマンドでクリックすると、新しいタブで開かれるので、もう一度ランキングのサイトでクリックをするために TAB T=1 でランキングサイトへ戻るようにしています。
10行目のWAITは、サイトへの負荷をかけないためです。プログラムで自動的にブラウザを操作する場合は、対象のサイトに負荷をかけないようにこのようにしておきましょう。
少し長かったですが、POSコマンドの使い方でした。ランキングサイトは毎週変更されているので、週毎にプログラムが正しく動くことを確認してみてくださいね。
もう少し具体的な作業の自動化の例で、ポイントサイトの自動クリックをやってみましょう。