こんにちは。アドクロールチームに所属しておりますエンジニアのinoueです。
日々の業務として、広告情報分析のためのクローラー開発・保守に取り組んでいます。

ルーター社では、seleniumというWebアプリケーションをテストするためのポータブルフレームワークを用いて、クローラー開発する機会が多くあります。
クローラー開発・保守の中でGoogleChromeの自動アップデートによりローカルのMacにてエラーが発生していたので、今回Macで

  • GoogleChromeの自動アップデートを防ぐ方法
  • GoogleChromeの再インストール方法

また

  • GoogleChromeバージョンに合わしたseleniumでのクロールに必要なchromedriverのインストール方法

をご紹介します。

Rubyでのselenium環境のセッティングについては、弊社のこちらの過去の記事を参照してください。

なぜGoogleChromeをアップデートしたくないのか?

seleniumを使用する際に、chromedriverGoogleChromeのバージョンを合わせる必要があり、合わせていないとクロール時にエラーが発生するからです。

なぜGoogleChromeがアップデートされるのか?

GoogleのGoogleChromeヘルプによると

最新のセキュリティ アップデートでユーザーを保護するために、Google Chrome は、新しいバージョンが利用可能になったときに自動更新できるようになっています。こうした更新では、ブラウザのデザインが変更されることもあります。

と書いてあります。つまり、ユーザー保護のため自動アップデートされているようです。

どのようにGoogleChromeがアップデートされるのか?

同じくGoogleのGoogleChromeヘルプによると

アップデートは通常、パソコンでブラウザを閉じて次に開くまでの間にバックグラウンドで行われます。ブラウザをしばらく開いたままにしていると、保留中のアップデートがあることが示される可能性があります。

と書いてあります。マルウェアではないですが、バッググラウンドで勝手にGoogleChromeがアップデートされるようです。

まずは自動でアップデートされる処理を変更したいと思います。

GoogleChromeの自動アップデートを防ぐ方法

海外記事の What is GoogleSoftwareUpdate.app on my Mac?を参照し、方法を紹介します。

Googleアプリ更新の時間確認

まずはdefaultコマンドというシステムやアプリを確認・変更するコマンドを使用し、googleアプリの設定を確認します。

以下のコマンドをターミナルで入力してください;
defaults read com.google.Keystone.Agent.plist

するとインストールしたGoogleアプリと期間により以下のように出力されます。

{
    ActivesInfo =     {
        "com.google.Chrome" =         {
            LastActiveDate = "2017-12-06 14:28:43 +0000";
            LastActivePingDate = "2017-12-08 08:00:01 +0000";
            LastRollCallPingDate = "2018-01-08 08:00:00 +0000";
            "ping_freshness" = "185764A0-9BC7-4A8D-AEDC-xxxxxxxxxxxx";
        };
        "com.google.Keystone" =         {
            LastActiveDate = "2018-01-19 06:50:23 +0000";
            LastActivePingDate = "2018-01-08 08:00:00 +0000";
            LastRollCallPingDate = "2018-01-08 08:00:00 +0000";
            "ping_freshness" = "75D4020E-0E22-4BBA-9749-xxxxxxxxxxxx";
        };
    };
    ReportingAttributes =     {
    };
    checkInterval = 18000;
    "firstRun-1.2.2.554" = "2015-12-20 07:08:17 +0000";
    "firstRun-1.2.3.738" = "2015-12-20 07:09:12 +0000";
    "firstRun-1.2.4.919" = "2016-03-07 01:38:45 +0000";
    "firstRun-1.2.5.1190" = "2016-07-16 08:31:35 +0000";
    "firstRun-1.2.6.1370" = "2016-09-24 02:32:46 +0000";
    "firstRun-1.2.7.43" = "2017-02-16 07:45:43 +0000";
    "firstRun-1.2.8.57" = "2017-05-16 03:13:00 +0000";
    "firstRun-1.2.8.82" = "2017-08-17 01:28:13 +0000";
    "firstRun-user-1.2.9.98" = "2017-11-08 10:56:30 +0000";
    "lastCheck-1.2.3.738" = "2016-02-28 10:08:31 +0000";
    "lastCheck-1.2.4.919" = "2016-07-06 06:24:37 +0000";
    "lastCheck-1.2.5.1190" = "2016-08-27 10:22:35 +0000";
    "lastCheck-1.2.6.1370" = "2017-01-14 09:12:26 +0000";
    "lastCheck-1.2.7.43" = "2017-04-07 09:56:14 +0000";
    "lastCheck-1.2.8.57" = "2017-07-25 06:51:51 +0000";
    "lastCheck-1.2.8.82" = "2017-10-08 03:44:58 +0000";
    "lastCheck-user-1.2.9.98" = "2018-01-09 07:51:29 +0000";
    lastCheckStartDate = "2018-01-19 06:50:23 +0000";
    lastServerCheckDate = "2017-11-08 10:56:04 +0000";
}

ここでのcheckInterval = 18000;はGoogleがアップデートを何秒ごとに行うかの値であり、今回は5時間(3600秒×5)を示しています。

この値を変更するには、以下のように再びdefaultコマンドを使用します。

defaults write com.google.Keystone.Agent checkInterval 604800

ここでは確認の時間単位を7日間に設定しています。この値を0にした場合、Googleにデータが送られることはありません。

Googleアプリ更新の停止

Googleソフトのアップデートは~/Library/Google/にあるため削除します。

sudo rm -R ~/Library/Google/GoogleSoftwareUpdate/

また、ここで削除しても、Google側で自動的にファイルを生成してしまうため、ダミーファイルを作成し、書き込まれないようにするため権限を444で設定します。

sudo touch ~/Library/Google/GoogleSoftwareUpdate
sudo chmod 444 ~/Library/Google/GoogleSoftwareUpdate

次にGoogleソフトアップデートに関わるファイルを削除してします。

sudo rm ~/Library/LaunchAgents/com.google.keystone.agent.plist
sudo rm  -R ~/Library/Caches/com.google.Keystone*
sudo rm ~/Library/Preferences/com.google.Keystone.Agent.plist

GoogleChromeを立ち上げ、URLでchrome://helpを入力し、以下のように更新に失敗していれば自動アップデートを停止できています。

GoogleChromeのアンインストール方法

MacでGoogleChromeをアンインストールするには、Finderのアプリケーションを開きGoogleChromeをゴミ箱に入れ削除します。

バージョンを指定したGoogleChromeのインストール方法

GoogleChromeをアンインストール後、バージョンを指定したGoogleChromeGoogle Chrome Older Versions Download (Windows, Linux & Mac)からインストールします。

今回はバージョン75を選択し、ダウンロードし、展開します。

これらの作業は、GoogleChromeをアンインストール後を想定しているのでSafariなどでGoogleChromeアプリをダウンロードしてください。 GoogleChromeを立ち上げ、URLにchrome://helpを入力し、バージョンがダウンロードしたバージョンであれば、自動アップデートなしでのアプリインストールに成功しています。

chromedriverのセッティング方法

GoogleChromeのバージョンに合わせたchromedriverをインストールします。先ほど、バージョン75をインストールしたので、バージョン75のchromedriverChromeDriver – WebDriver for Chromeからダウンロードします。

以下のコマンドを入力すると 64ビットのchromedriverが確認できます。

$ls ~/Downloads/
chromedriver_mac64.zip

解凍しすると、

unzip chromedriver_mac64.zip

chromedriverが確認できます。

chromedriver

次に通っているパスを確認します。

$echo $PATH
/usr/local/bin

通っているパスにchromedriverを移動させます。

mv ~/Downloads/chromedriver /usr/local/bin

chromedriverのパスを確認し、 パスが通っているディレクトリに確認できました。

$which chromedriver
/usr/local/bin/chromedriver

最後に、chromedriverのバージョンを確認します。 今回はバージョン75をダウンロードしたので、75が表示されていることが確認できます。

$chromedriver -v
ChromeDriver 75.0.3770.140

さいごに

自動アップデートしないGoogleChromeの環境構築ご紹介させていただきました。良いスクレイピングライフを!