メニュー
セール中のおすすめ商品

AppleScript で Google Chrome を操作してボタンをクリックするコード

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

ここでは AppleScript で Google Chrome ブラウザを操作してボタンをクリックするコードを紹介します。

もくじ

AppleScript からのクリック操作を受け付けられるように設定を変更する

ウェブサイト内の要素の取得やクリック操作は JavaScript を実行することで実現できます。しかし初期設定のままの Google Chrome では AppleScript からのクリック操作を受け付けられないので、受け付けられるように設定を変更する必要があります。

メニュー「表示 > 開発 / 管理 > Apple Events からの JavaScript を許可」を「入」にします

ブラウザに JavaScript を実行させるための AppleScript

Mac で動くスクリプトとして、AppleScript(アップルスクリプト)があるように、ブラウザで動くスクリプトとして JavaScript(ジャバスクリプト)があります。

ブラウザ上の HTML 要素へのアプローチは AppleScript から直接おこなえないため、対象の HTML 要素を指定するにはブラウザに JavaScript を実行させるための AppleScript を書く必要があります。

開発ツールを起動する

開発ツールを起動して対象の HTML 要素に辿り着けるようにします。

この章以降では ウェブスクレイピングの練習用のページをもとにして説明します。

ここでは AppleScript で「ボタン2」をクリックすることを目的に想定します。

STEP
ウェブページ上で右クリックして「検証」を選択します
Google Chrome

ここでは「ボタン2」のボタン上で右クリックしています

STEP
画面が分割され開発ツール(コードが並ぶ画面)が表示されます
Google Chrome

開発ツールのインターフェースを常時日本語にする場合は、開発ツールにある以下の「Switch DevTools to Japanese」をクリックします。

ボタンは左から「常に Chrome の言語設定に合わせる/常時日本語にする/次回から表示しない」

対象の HTML 要素をスクリプトで指定してクリックする方法

対象の HTML 要素を指定するために、以下の HTML 要素が持つ情報をもとにします。

HTML 要素が持つ情報

  • ID
  • 名前
  • クラス名
  • タグ名
  • XPath

さて、先ほど「ボタン2」のボタン上で右クリックして開発ツールを表示した人は、以下のようにコードの一部が選択されていると思います。(そうでない人は、ここで改めて「ボタン2」ボタン上で右クリックして検証を選択してください)

Google Chrome

このコードの中身を見やすくすると以下のようになります。

<button 
id="button2" 
name="alert_btn" 
class="green" 
onclick="alert('ボタン2をクリック!')">
ボタン2
</button>

表形式にしてみるとこんな感じ

HTMLの要素(タグ名)button(ボタン)
id(ID または識別子)button2
name(名前)alert_btn
class(クラス名)green

この中から指定しやすい順に探していきます。以下がその順番です。

  1. ID
  2. 名前
  3. クラス名
  4. タグ

ではここからは実際に HTML 要素を指定してクリックするスクリプトを見ていきましょう。

ID で HTML 要素を指定してクリック

まずは ID で HTML 要素を指定しクリックする AppleScript です。

tell application "Google Chrome"
tell front window
tell active tab
execute javascript "document.getElementById(‘button2’).click();"
end tell
end tell
end tell

指示した JavaScript

document.getElementById('button2').click();
今回の JavaScript の構文イメージ

ID は一意のもので同ページ内で重複しません(ルール上)

名前で HTML 要素を指定してクリック

次は名前で HTML 要素を指定しクリックする AppleScript です。

tell application "Google Chrome"
tell front window
tell active tab
execute javascript "document.getElementsByName(‘alert_btn’)[1].click();"
end tell
end tell
end tell

指示した JavaScript

document.getElementsByName('alert_btn')[1].click();
今回の JavaScript の構文イメージ

名前は複数取得されます。スクリプト内の[1] で “その 2 番目だよ“ と指示しています

1 なのに 2 ? えっ、、、どういうこと???

JavaScript では 1 番目を 0 とします。したがって “ 2 番目” を示す場合 JavaScript 上では[1]と書きます。

ちなみに AppleScript では 1 番目は 1 です

どうやって “ 2 番目” だということを調べるのか

前掲の表をみると名前には以下の値が設定がされています。

alert_btn

同ページ内で同じ名前を検索しよう

検索をおこなうには開発ツールの要素パネル内でショートカットキー「⌘+F」を入力します

Google Chrome

コードが並ぶ画面の下部に現れる検索窓に「alert_btn」と入力して、「ボタンで結果へ移動。対象となる HTML 要素が表示されるまで移動します。

Google Chrome

結果は「 2 / 6 」ということで、 “( 6 個中の) 2 番目” ということが判りました

これらはクラス名、タグで指定する際も同様です

クラス名で HTML 要素を指定してクリック

続いてクラス名で HTML 要素を指定しクリックする AppleScript です。

tell application "Google Chrome"
tell front window
tell active tab
execute javascript "document.getElementsByClassName(‘green’)[1].click();"
end tell
end tell
end tell

指示した JavaScript

document.getElementsByClassName('green')[1].click();
今回の JavaScript の構文イメージ

クラス名も複数取得されます。スクリプト内の[1] で “その 2 番目だよ“ と指示しています

どうやって “ 2 番目” だということを調べるのか

前掲の表をみるとクラス名には以下の値が設定がされています。

green

名前で指示する際と同様にgreenで検索してみましょう。

結果は「 6 / 12 」になり、“ 12 個中の 6 番目” …となりそうですが「green」という文字列は他にも多く使われており、実際には 6 番目ではありません。

あくまでclass="green"が何番目なのかを指示しなくてはならないので、実際には「」ボタンで次へ移動しながら、class="green"となっているものを数えながら何番目なのかを探ってください。

クラス名は複数設定可能

クラス名半角スペースで区切ることで、複数設定することができます。

class="col s18 offset-2 btn"

つまりこの場合は cols18offset-2btnの 4 つのクラスが設定されている状態です。

検索する際はいずれかのクラス名を利用すれば OK です。

タグ名で HTML 要素を指定してクリック

続いてタグ名で HTML 要素を指定しクリックする AppleScript です。

tell application "Google Chrome"
tell front window
tell active tab
execute javascript "document.getElementsByTagName(‘button’)[5].click();"
end tell
end tell
end tell

指示した JavaScript

document.getElementsByTagName('button')[5].click();
今回の JavaScript の構文イメージ

タグ名も複数取得されます。スクリプト内の[5] で “その 6 番目だよ“ と指示しています

どうやって “ 1 番目” だということを調べるのか

前掲の表をみるとタグ名には以下の値が設定がされています。

button

これまでと同様に検索してみましょう。

タグ名の場合は先頭に<を付けて<buttonとして検索すると(タグのみを検索できるので)オススメです。

結果は「 6 / 19 」になり、“ 19 個中の 6 番目” ということが判ると思います。

ここでやろうとしている処理から見れば、HTML 要素とタグ名はほぼ同義です。つまり単に「◯番目の HTML 要素」ということを指示していることになります。

XPath で HTML 要素を指定してクリック

最後に XPath で HTML 要素を指定しクリックする AppleScript です。

tell application "Google Chrome"
tell front window
tell active tab
execute javascript "document.evaluate(\"//*[@id=’button2′]\", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).click();"
end tell
end tell
end tell

指示した JavaScript

document.evaluate(\"//*[@id='button2']\", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).click();
XPath とは何か

HTML の中から特定の要素を見つけるために使用される(XML Path Language とも呼ばれる)言語。文書内の要素を簡単に特定できるため、Web スクレイピングや Web アプリケーション開発などの場面で広く使用されています。

具体的には HTML のツリー構造(階層)に基づいて要素を特定するためのパスを指定することができます。

パスの取得は以下のとおりです。

  • 取得したい要素のコード上で右クリック
  • 「コピー > XPath をコピー」を選択
  • 完了(ペースト可能状態になる)
「コピー > XPath をコピー」を選択で、クリップボードに XPath がコピーされる
AppleScript で構文エラーend of lineがあるべきところですがidentifierが見つかりました)が出る場合の対処

AppleScript の構文のルールに則っていない場合のエラーです。

今回の場合はそのままやると AppleScript の「”」(ダブルクオート)の中に JavaScript の「”」が入ることになり、「\(バックスラッシュ)」でのエスケープ処理(=次の文字を本来の意味として使わない宣言)や「’」(シングルクォート)への置き換えなどをおこなう必要があります。

今回の例では\"//*[@id='button2']\"の部分において、ダブルクオートをシングルクォートに置き換えています。
さらに\"//*[@id='button2']\"の部分において、両端のダブルクオートをエスケープ処理しています。

バックスラッシュは「オプションキーと¥(⌥ + ¥)」で入力できます。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
もくじ