ノリックのIT生産性向上、ライフハック、プロマネのお仕事備忘録

IT系の仕事の事とか役立つツールとかプロジェクトマネジメントの事とかを記載していきます。

AppiumをつかってKindleのページまくりを自動化する。仕事の効率化にも使えそうだな

Kindleの音読で読書がはかどったおかげで、読む本がなくなってしまった。やむを得ず、無料期間もあることだしKindleUnlimitedに加入してみることにした。流石は追加料金を払うだけあっていろいろな本が読める。ちょっと驚いたのはUnlimitedだとグラビアアイドルさんの写真集が詰め合わせで読み放題になっているのである。気がつくと自己啓発本を読むことを忘れ、グラビアアイドルさんばかり読み耽る日々になってしまった。そのうえ困ったのが会社で参考にしている本を読もうとするとグラビアアイドルさんの写真がKindleのTOP画面に出てきてしまうのである。つまり家ですばやく読み、仕事に行く前に削除してから出社しないと、職場でKindleを開けないという事態になってしまうのである。

  

 

Kindle

Kindle開いた直後

そこでこの緊急事態に対処すべく対策の検討をおこなった。なお、以前から取り組んでいるKindle読上げ機能では対処できないことはわかっている。文章が無い事と、グラビアアイドルさんたちの画像を見ないとこれらの本に価値は無い為である。

 

 

AppiumによるKindle自動ページまくりの環境構築

前の職場ではWEBアプリケーションの開発を開発していた。テストを自動化するためにSeleniumやiMacrosを使用していた。今の職場ではVBでつくったクライアントアプリケーションのためテスト自動化に使用できるツールをで良いのがないか探してはいた。無料で使えるAppiumが良さそうだなと持っていたので、これを使って解決できないか検討してみた。

 

参考サイト

Appium を使った Windows ネイティブアプリケーションの UI テスト自動化 - Qiita

必要なファイルの入手

1. Appium

http://appium.io/index.html?lang=ja

 

2. Microsoft WinAppDriver

https://github.com/Microsoft/WinAppDriver/releases

 

3. Visual Studio 2017

カネがないのでCommunity Editionである。

https://visualstudio.microsoft.com/ja/vs/community/

 

4. UIレコーダー

アプリケーションを操作した記録をC#でテストコードとして生成してくれるようだ。しかし私が試したところKindleでは記録したソースでは正常に動作しなかった。会社のシステムは.Net Frameworkを使用しているので使えるかもしれないので備忘として記録しておく。

https://github.com/Microsoft/WinAppDriver/tree/master/Tools/UIRecorder

参考ページ

https://forest.watch.impress.co.jp/docs/news/1128952.html

 これで順番にインストールしていけば大丈夫だろう。

 

5. Kindle for PC 

これはあまりバージョンに影響しないと思うが、念の為この時点での最新バージョン1.25.1を使用していることを記載しておく。

https://www.amazon.co.jp/gp/digital/fiona/kcp-landing-page/ref=amb_link_11

 

動作環境

自分の動作環境はWindows10 Pro 1809

Windows10意外はMicrosoft WinAppDriverがサポートしていないとのことで注意されたし。

 

Kindleを自動でページめくりする

ソースコード

Visula Studioを立ち上げてとりあえず出来たソースが以下の通りである。

using System;
using System.Diagnostics;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Remote;
 
namespace AppiumSample
{
  class Program
      {
        public static void Main(string[] args)
        {
            //Windows Application Driver実行
            string serverPath = System.IO.Path.Combine(
            System.Environment.GetFolderPath(
           System.Environment.SpecialFolder.ProgramFilesX86
              ), @"Windows Application Driver", "WinAppDriver.exe"
            );
            System.Diagnostics.Process.Start(serverPath);

            DesiredCapabilities appCapabilities = new DesiredCapabilities();
            appCapabilities.SetCapability("app", "C:\\Users\\norihiko\\AppData\\Local\\Amazon\\Kindle\\application\\Kindle.exe");
            RemoteWebDriver driver = new RemoteWebDriver(new Uri(@"http://127.0.0.1:4723"), appCapabilities);
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(3));
   

            driver.FindElementByName("フルスクリーン").Click();
       //TODO:Kindleで最大ページ数を取ることが出来ず、ここは毎回手で書き直している。
            for (int i = 1; i < 100; i ++)
            {
                driver.FindElementByName("Turn Page").Click();
            }

     
            driver.Dispose();
            driver = null;

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
    }
}

 

 

Kindle自動ページめくりプログラム実行前の準備

完全に自動化できるわけではないので以下の作業だけは手動で行う必要がある。

1. Kindleの立ち上げ。

2. 読みたい本を開き最初のページを表示しておく。

3. ページ数に合わせてソースコードのTODO:にある最大ページ数を書き換える。

4. プログラムの実行 

 

Kindle自動ページめくりで読み終わった後のお片付け

1. コンマリメソッドで言うところのグラビア写真集に感謝の気持ちを込めて返却。

2. Kindleのトップページに職場で見られて恥ずかしい本が無いかを指差し確認。

3. 仕事に向かう。

 

Kindle Unlimitedの今後をどうするか

とりあえず無料期間の1ヶ月は使うとして、読みたい本がなくなれば解約してしばらくしたらまた使うというやり方がいいかもだ。しかし、Unlimitedにしてからグラビアアイドルさんの本しか見ていないことを考えると早急にやめてしまったほうが良い木がしてきた。可処分時間がかなり奪われてしまっている。男性諸君はKindle UnlimitedにはそのようなAmazonの巧妙な罠があることも注意しておくべきだろう。

 

仕事ではかなり使えそうだ

私が今やっているプロジェクトはテストフェーズに入っているので毎日手入力で色々な業務パターンのテストをしている。手入力だと入力間違いがないかどうか気を使いながら入力するのでかなり精神的も体力的にも消耗してしまう。これをエクセルから読み込んで自動的にアプリケーションの画面に入力できるようにすれば、かなりの生産性向上になるのではと思う。また、世の中働き方改革でRPAが大ブームだ。このAppniumもプログラムを組む必要があるが、RPAと言えなくもない。顧客の業務改善にも役立てられそうである。

Appiumを業務テストで使用する為の画面キャプチャ

仕事で使う場合、画面に出力されたメッセージや計算結果を検証する必要がある。自動テストでは画面がどんどん進んでいってしまうため、あとでじっくり検証しようと思うと画面キャプチャを取る機能は必須だろう。そのためのメソッドも念のために調べておいた。

                Screenshot screenshot = driver.GetScreenshot();
                screenshot.SaveAsFile("c:\\temp\\autoTest\\" + j + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

これでプロジェクトをストレスフリーで鬼速化できるだろう。

 

課題

 できれば本の最大ページ数をなんとか読み込ませ、毎回プログラムをて修正しないで良いようにしたい。また、読み終わった本を自動で閉じ、返却処理まで自動化してくれると良いだろう。もうちょっと調査が必要である。