
マイケル
みなさんこんにちは!
平日真っ只中ですがみなさんいかがお過ごしでしょうか?
平日真っ只中ですがみなさんいかがお過ごしでしょうか?

マイケル
僕はもちろん仕事です・・・

エレキベア
現実はカナシマシマシクマ

マイケル
しかし今日は割と仕事に余裕があったので
合間をぬってツールを作ろうと考えてみました!
合間をぬってツールを作ろうと考えてみました!

マイケル
その名も・・・Kindle書籍自動スクショくん!

エレキベア
(仕事しろよ・・・)

マイケル
みなさんはKindleで購入した書籍を画像として保存したり印刷したいと思ったことはありませんか?
今回作ったツールはKindleアプリを自動でページ移動しながらスクリーンショットを行うことで全ページを画像ファイルとして保存するツールです!
今回作ったツールはKindleアプリを自動でページ移動しながらスクリーンショットを行うことで全ページを画像ファイルとして保存するツールです!

エレキベア
それは法律的にアウトなのではないクマ?

マイケル
2020年8月現在、個人利用で楽しむ範囲であれば基本的にスクショや印刷はOKとなっているよ!
でも、スクショや印刷したものを自分以外の人に渡してしまうとアウトになるから気をつけてね!

エレキベア
悪用は厳禁クマね
仕様を考える

マイケル
ざっくりとツールの仕様を考えます!
まずKindleアプリの画面仕様はこのようになっています
まずKindleアプリの画面仕様はこのようになっています

マイケル
矢印キーを押せばページがめくられる。
つまり最低限、矢印キー押下とスクリーンショットをページ数分繰り返す処理をさせれば画像への変換はできそうだ!
つまり最低限、矢印キー押下とスクリーンショットをページ数分繰り返す処理をさせれば画像への変換はできそうだ!

エレキベア
手でやるのが大変だからツールで自動化しようということクマね
開発環境の準備

マイケル
次に開発環境を準備します!
僕が久しぶりに使いたいのと、手頃だからという理由から
今回はPythonを開発言語として選定しました!
僕が久しぶりに使いたいのと、手頃だからという理由から
今回はPythonを開発言語として選定しました!

マイケル
入れていない方は自身の環境にPython3をインストールしましょう!

エレキベア
インストール方法はぐぐるクマ

マイケル
そして今回はキー操作やスクリーンショットを行うために、
pyautoguiというライブラリを使用しました。
こちらもpipでインストールしましょう!
pyautoguiというライブラリを使用しました。
こちらもpipでインストールしましょう!
↑インストールコマンド

エレキベア
これで準備完了クマね
ツールの作成

マイケル
そして作成完了したツールはこちらになります!

マイケル
1. スクショを撮る範囲、ページ数を設定して実行する。
2. 実行後、待機時間中にスクショを撮りたい画面をアクティブにする。
3. 自動でスクショ取得処理が実行されて出力フォルダに画像が出力される。
といった流れになっています!
2. 実行後、待機時間中にスクショを撮りたい画面をアクティブにする。
3. 自動でスクショ取得処理が実行されて出力フォルダに画像が出力される。
といった流れになっています!

エレキベア
思ったより簡潔クマね

マイケル
pythonは簡潔に書けるのも特徴だからね!
それぞれ処理部分を見ていきます
それぞれ処理部分を見ていきます
スクショ範囲、ページ数の設定

マイケル
ここの値は、各自の環境に合わせて変更します!
ページ数: スクリーンショットを撮る枚数を設定する。
取得範囲: スクリーンショットを撮る左上・右下の座標(x座標,y座標)を設定する。
スクショ間隔: スクリーンショットを1枚撮るごとの待ち時間を設定する。
出力フォルダ・ファイル頭文字: 出力するフォルダ名とファイル名の頭文字を設定する。

マイケル
スクリーンショットを撮る座標については、
「pyautogui.position()」でマウスカーソル位置の座標を取得できるみたいだから計測ツールも作ってみたよ!
「pyautogui.position()」でマウスカーソル位置の座標を取得できるみたいだから計測ツールも作ってみたよ!

マイケル
でも画面の解像度によっては取得座標の倍率が変わってくるみたいだから、参考程度での計測としてください!

エレキベア
ぜんぶ設定完了クマ〜〜〜

マイケル
できるクマですね
スクリーンショット取得処理

マイケル
そして次はメインとなるスクリーンショット取得処理をみていきます!

マイケル
まず実行した後にスクショ開始までの待機時間を5秒設けてあるので・・・

マイケル
この間に手動でスクショを撮る画面をクリックして対象を合わせます!
合わせた対象画面に対して、キー押下やスクショを実行していく流れになります!
合わせた対象画面に対して、キー押下やスクショを実行していく流れになります!

エレキベア
(作りが雑クマ・・・・・)
※「pyautogui.keyDown(‘right’)」の後に「pyautogui.keyUp(‘right’)」も実行しないと
うまくいかない情報もあるようです。(コメント欄参照)

マイケル
そして最後のロジック部で、
スクリーンショットを取ったあと右矢印キー押下して1秒待機といった処理をページ数分繰り返すようにしています!
スクリーンショットを取ったあと右矢印キー押下して1秒待機といった処理をページ数分繰り返すようにしています!

エレキベア
これで画像取得完了クマね
実行結果

マイケル
さて実際にこのツールを僕が購入した書籍で試すとどうなるのか!

マイケル
スクショ181枚(362ページ分)が無事完了して、
かかった時間は約12分!
かかった時間は約12分!

マイケル
シャワー浴びてる間に終わるし許容範囲ではないでしょうか・・・

エレキベア
無事成功クマ〜〜〜

マイケル
もう少し速度を上げたい場合はアプリの反応速度と相談しながらspanの値を変えてみてください!
おわりに

マイケル
電子書籍のスクショ自動化にPythonを使ってみましたが
このライブラリは割と汎用性が高いのではないでしょうか
このライブラリは割と汎用性が高いのではないでしょうか

マイケル
今回は右矢印キーとスクショだけだったけど、他のキーや文字入力もできるから、ケースバイケースで修正していろいろな場面で使えると思う!

エレキベア
単調な仕事もこんな感じで自動化すれば楽になるクマね

マイケル
休憩してる間にプログラムに作業させておくことなんてことも全然可能だね!

マイケル
こんな感じで、今後も日々の生活にプログラミングを役立てていきましょう!
それではアデュー!
それではアデュー!

エレキベア
クマ〜〜〜
【Python】pyautoguiを使ってKindle書籍を自動でスクショするツールを作ってみた! 〜完〜