Google カレンダーに登録されているweb会議に、5分前に自動的に参加してくれるようにできたのでそのやり方を書きます。
これを使えば会議への出席忘れや会議の少し前から待機している必要がなくなります。
環境
- mac
- google calendar
- google meets
- safari
1.自動的にブラウザを立ち上げる
macには操作を自動化してくれるAutomatorというアプリケーションがあります。
今回はこちらを主に使用して自動化します
automatorを立ち上げると処理を聞かれるので、なんでもいいですがとりあえずワークフローを選択
1.2 シェルスクリプトからsafariを起動
open -a "/Applications/Safari.app"
こちら後に記述するAppleScriptでもアプリケーションの起動はできるのですが、私の場合AppleScriptで行うと、アプリケーションを指定してもデフォルトのブラウザで起動してしまったので、シェルスクリプトを使用しました。
Safariで起動した理由は、AppleScriptを使用する場合、safariの方ができることが多いからです。
まずはここまでを実行してみてください。
無事にsafariが起動できたら第一段階クリアです。
2.AppleScriptでブラウザ操作
2.1Googleカレンダーを起動
ワークフローにAppleScriptを追加してコードを追加します
tell application "Safari"
delay 3
tell window 1
set URL of current tab to "https://calendar.google.com/calendar"
end tell
end tell
一応コードを解説するとtellで操作するアプリケーションを指定します。
delayは処理を待ってくれます。safariが起動してから少し待って、google calendarのURLに遷移するようにしています。
注意
safariでは必ず開発メニューから
- apple eventからのJavascriptを許可にチェック
- javascriptを無効にチェックが入っていない
状態か確認してください
この状態でなければjavascriptがsafariで動きません。
2.2 Googleカレンダーのイベントをクリックする
Googleカレンダーのページをデベロッパーツールを使用して確認すると押したいイベントのボタンのクラスを取得できます。
これを見る限り、"ynRLnc"というクラスを探してそのボタンを押せば良いですね。
ただし、すべてのイベントに対してこのクラスが含まれるので、特定のイベントのみクリックしたい場合は
条件を設定します。
今回は今日のイベントにのみ参加するjavascriptのコードを書きました。
tell application "Safari"
delay 3
set theScript to "
var hiduke = new Date();
var year = hiduke.getFullYear() + '年';
var month = hiduke.getMonth() + 1 + '月';
var day = hiduke.getDate() + '日';
var target = document.getElementsByClassName('ynRLnc');
for (let i = 0; i < target.length; i++) {
if (
target[i].innerHTML.includes(year) &&
target[i].innerHTML.includes(month) &&
target[i].innerHTML.includes(day)
) {
target[i].click();
}
}
"
do JavaScript theScript in current tab of first window
end tell
AppleScriptでjavascriptを実行するには
do JavaScirpt ~処理
という記述が必要です。
また、javascriptの中で""が含まれているとそこで処理が終了してしまうので、必ず''を使ってください。
こちらがうまく実行されると、イベントのモーダルが表示されます。
なのでまた同じようにボタンが存在するクラス"EyDoae"を先ほどとほぼ同じ処理でクリックする処理をAppleScriptでワークフローに追加します。
tell application "Safari"
delay 3
set theScript to "
const join = document.getElementsByClassName('EyDoae');
const link = join[0].firstElementChild;
link.click();
"
do JavaScript theScript in current tab of first window
end tell
3.google meetsに参加
googleカレンダーからgoogle meetsへの参加ボタンが押されたら新しいタブにてgoogle meetsが開かれます。
初期設定ではカメラとマイクがONになっているので、OFFにして起動したい人は以下のappleScriptを追加してください。
tell application "System Events"
delay 3
key code 14 using {command down}
key code 2 using {command down}
end tell
これはカメラとマイクをOFFにするショートカットキーです。
tell application "Safari"
delay 3
set theScript to "
var meets = document.getElementsByClassName('VfPpkd-vQzf8d');
for (let i = 0; i < meets.length; i++) {
const text = '今すぐ参加';
if (meets[i].innerHTML.includes(text)) {
meets[i].click();
}
}
"
do JavaScript theScript in current tab of first window
end tell
最後に参加ボタンを押すスクリプトを追加すれば、自動的にsafariを起動し、googleカレンダーを開いてgoogle meetsの会議に参加することができます!
4.スケジューリング
このワークフローを保存すれば、今後はこのファイルを起動すれば処理が走るようになります。
googleカレンダーのイベントに合わせてスケジューリングするには、mac標準のカレンダーにGoogleカレンダーを同期させます。
macのカレンダーアプリを起動し、設定→アカウント→+ボタンをクリックすることで追加できます。
同期が完了すればmacのカレンダーにgoogleカレンダーのイベントが追加されています。
イベントをクリック
→通知をカスタム→ファイルを開く→その他のアプリからautomatorで作成したアプリケーションを選択
これで自動的に会議に参加することができました!
ちなみに
今回はAppleScirptを使用してブラウザを操作しましたが、AppleScriptの記述を覚えるのが大変でデバッグも面倒でした。
ブラウザの操作は、Automatorで記録することが可能ですし、ブックマークレットでも同じことができます。
しかし、Automatorでの記録は座標がずれてしまう可能性があり、ブックマークを押してくれるような操作は自動化できなかったのでこのような方法を取りました。
javascriptの記述を少し変えるだけでZoomの会議だったり、その他のカレンダーやブラウザからも同じことが可能です。
是非ともこれを参考にオリジナルのスケジューリングを試してみてください!