スクリーンショット自動化のApple Script解説とiPhone・iPadだけでのスクリーンショット自動化について考えていきます。
自動化と著作権等関連法規について
DXでの自動化は取り扱う内容によっては法規制の対象になる場合があるので注意しましょう。
- 著作権等権利に関わる場合
- 処理量増加や占有に伴うサーバ負荷に関わる場合
- その他
スクリプトの説明
スクリプト
--変数設定
global waitSeconds
global appName
set waitSeconds to 0.5 --スクリーンショットのタイミングが合わない場合は秒数を調整する。
set appName to "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか
-- OSVersinon確認 10.14 Mojaveより前のOSでは使えません。
set OSVer to do shell script "sw_vers -productVersion| cut -d '.' -f 1-2"
set nOSVer to OSVer as number
if nOSVer < 10.14 then
display alert "このスクリプトはMojave以降のOSでしか使えません。"
process_end()
end if
--スクリーンショット回数の指定ダイアログ表示
display dialog "範囲指定と保存先設定は済んでいますか?" & return & "" & return & "範囲指定:点線エリアを調整します。" & return & "保存先:画面右下のオプションから保存先を指定します。" & return & "最後に右下のパネルをxで閉じるか「取り込む」を押します。" buttons {"はい", "設定", "終了"} default answer "はい" with title "選択範囲設定確認Step0"
set confirmPattern to button returned of result
if confirmPattern = "終了" then
process_end()
end if
if confirmPattern = "設定" then
screenshottoolopen()
end if
--スクリーンショット回数の指定ダイアログ表示
display dialog "スクショする回数を入力してください。" default answer "5" with title "自動スクショStep1"
set screenShotNumber to text returned of result
--電子書籍のページ方向の指定ダイアログ表示(右開きなのか左開きなのか)
display dialog "右開き?左開き?" buttons {"左", "右"} default button 2 with title "自動スクショStep2"
set btn to button returned of result
repeat with p from 1 to screenShotNumber
tell application appName
activate
tell application "System Events"
delay waitSeconds
shot_screenshot() of me --撮影
--ページ送り処理
if btn = "右" then
--key code 123
keystroke (ASCII character 29) -- ページ右送り
else --左
--key code 124
keystroke (ASCII character 28) -- ページ左送り
end if
delay waitSeconds
end tell
end tell
end repeat
tell me
activate
display alert "処理が終了しました。"
end tell
--Mac ScreenShotツールでスクリーンショット取得
--このツールはMojave以降で使えます。
on shot_screenshot()
delay 1
tell application "System Events"
key code 23 using {command down, shift down}
delay waitSeconds
key code 76
end tell
delay 1
end shot_screenshot
--設定のためにScreenShotToolを起動する。
on screenshottoolopen()
tell application appName
activate
tell application "System Events"
key code 23 using {command down, shift down}
end tell
end tell
end screenshottoolopen
on process_end()
error number -128
end process_end
コード説明 抜粋
KindleアプリはデータをローカルPCにダウンロードが済んでから表示しスクリーンショットを取得していきますが、ページ送りに時間がかかる場合があります。そのため処理の途中で処理待ち時間を数秒入れています。もしご使用の環境でスクリーンショットのタイミングが合わない場合はこの処理待ち時間を増やして調整してみてください。
set waitSeconds to 0.5 --スクリーンショットのタイミングが合わない場合は秒数を調整する。
set appName to "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか
本記事でのスクリーンショットはMac OS10.14 Mojave以降から搭載されている「スクリーンショット.app」で選択範囲と保存先の機能を使用しています。そのため古いMac OSだと起動できないようにコーデインングしております。古いOSで自動化したい場合は過去記事をご参照ください。
-- OSVersinon確認 10.14 Mojaveより前のOSでは使えません。
set OSVer to do shell script "sw_vers -productVersion| cut -d '.' -f 1-2"
set nOSVer to OSVer as number
if nOSVer < 10.14 then
display alert "このスクリプトはMojave以降のOSでしか使えません。"
process_end()
end if
スクリーンショットの回数とページ開き方向の設定をダイアログボックスを使って対話型で入力してもらいます。
--スクリーンショット回数の指定ダイアログ表示
display dialog "スクショする回数を入力してください。" default answer "5" with title "自動スクショStep1"
set screenShotNumber to text returned of result
--電子書籍のページ方向の指定ダイアログ表示(右開きなのか左開きなのか)
display dialog "右開き?左開き?" buttons {"左", "右"} default button 2 with title "自動スクショStep2"
set btn to button returned of result
ここがスクリーンショットを繰り返す処理になります。appNameでアプリケーションをしていし一番手前に表示させます、そこからshot_screenshot関数でスクリーンショットを取得します。ページ送りではkeystrokeを使っていますがkey code指定ではページが切り替わらなかったからです。この中で2回delayをいれていますのでここでタイミングを調整しています。
repeat with p from 1 to screenShotNumber
tell application appName
activate
tell application "System Events"
delay waitSeconds
shot_screenshot() of me --撮影
--ページ送り処理
if btn = "右" then
--key code 123
keystroke (ASCII character 29) -- ページ右送り
else --左
--key code 124
keystroke (ASCII character 28) -- ページ左送り
end if
delay waitSeconds
end tell
end tell
end repeat
「スクリーンショット.app」をkey codeで起動しkey code 76を送信しスクリーンショットを取得しています。
--このツールはMojave以降で使えます。
on shot_screenshot()
delay 1
tell application "System Events"
key code 23 using {command down, shift down}
delay waitSeconds
key code 76
end tell
delay 1
end shot_screenshot
範囲指定と保存先の設定を行うために「スクリーンショット.app」を起動させていますので、key code 76がない関数になっています。上のshot_screenshot()に引数を実装させて共通関数にしてもよいです。
--設定のためにScreenShotToolを起動する。
on screenshottoolopen()
tell application appName
activate
tell application "System Events"
key code 23 using {command down, shift down}
end tell
end tell
end screenshottoolopen
iPhone iPadだけでスクショ自動化を検討中
iPhone・iPadでは自動でスクリーンショットを撮る事ができません。これできちゃうとセキュリティー上かなりも問題になってきますね。
iPhoneやiPadのスマホ・タブレットではアプリケーション間の制御のやりとりが制限されています。ですので以下の手順で処理をする事が実質不可能になっています。
スクリーンショット取得→電子書籍アプリでのページ送り→スクリーンショット取得 (繰り返し)
また、処理のスタート起点も確立できないのも課題です。
iPhone・iPadの「ショートカット」を利用する方法も検討しましたが今のところレシピを作れるまでには至っていません。
今後の検討として「スイッチコントロール」を使ってみる方法がありますが、こちらもタップ数の制限があり素のままでは自動化に利用が難しいです。打開策として外部からレシピを起動されるといけそうな気もします。
スイッチのソースで外部のBluetoothキーボードを接続してApple Scriptでキーストローク送ってそれをトリガーにするとできるかもしれませんが、そもそもそれってiPhoneだけで実行できていないですよね・・・
スクリーンショット過去記事とMacのスクリーンショット手動まとめ
↓スクリーンショット自動化第二弾記事 範囲指定でスクリーンショットできる様にコーディングしていますが、画面上に点線を表示できていないので使用感がすっきりしていませんので今回の記事第三弾を作成しました。ただこの2回目の記事はMojaveより前のOSを使っている場合には有効な範囲指定スクショ機能となっています。
↓Macでのスクリーンショット取得(手動)のまとめ記事 手動でのスクリーンショット取得機能の解説をしている記事です。時々ショートカットキー等を忘れるのでその時のために記述しておきました。
学習方法
今回の記事ではApple Scriptを用いて実装していますが、udemyでもApple Scriptの講座が少なくて英語と他の言語でのに講座だったと思います。他の講座もきっと興味を惹かれるはずです。
AmazonではApple Scriptの書籍はほとんどないです。詳しく知りたいのであればwebで情報収集となります。
コメント
コメント一覧 (2件)
はじめまして。
こちらの記事を拝見して、キンドル→adobe scan→good note5で参考書の文字検索ができるような仕様にして勉強しています。
本当に有益な情報ありがとうございます。
おかげで勉強が習慣化しました。
初めまして。こちらの記事を参考にスクショさせていただいております。
ありがとうございます!
こちらのスクリプトをいじって、ページの送るスピードを早めることはできるのでしょうか?
お手隙の際で構いませんのでお返事いただけると幸いです。
よろしくお願い申し上げます。