さくらVPS(Ubuntu)上でコマンドラインでChromeをインストールし、仮想ディスプレイとseleniumからpythonでChromeを起動する

# 目的
ログインページ等POSTが必要なWebスクレイピングのコードを書くのは面倒です。その煩わしさを解消するために、seleniumを使いました。seleniumを通じてブラウザを自動実行し、POSTが必要な操作も自動化し、Webスクレイピングを行います。

# 環境
OS: Ubuntu16.04(さくらVPS）


# Step1) Chromeをコマンドラインでインストールする

```
mkdir download
cd download
wget  https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
rm google-chrome-stable_amd64.deb
```

(参考URL) http://bit.ly/2bBK3Ku

Step2) Google Chromeの起動準備
コマンドラインではgoogle-chromeとコマンドを打つことで、起動できますが、この状態で起動をすると２つの問題が発生しました。
その２つは、
１）依存関係が壊れていること。
２）（当然ですが）画面が無いこと。
です。対処した内容を以下に示します。

CLIではgoogle-chromeとコマンドを打つことで、起動できますが、この状態で起動をすると２つの問題が発生しました。
その２つは、
１）依存関係が壊れていること。
２）（当然ですが）画面が無いこと。
です。対処した内容を以下に示します。
## 問題１) 依存関係の修復

以下のコマンドで対応しました。

```
sudo apt-get update
sudo apt-get -f install
```
## 問題２）画面がない
### <b>((案１)) GUIデスクトップ</b>
以下のコマンドでGUIデスクトップをインストールすることができますが、時間が長くかかりそうなので途中で止めました。

```CLI:GUIデスクトップのインストール
sudo apt-get -y install ubuntu-desktop
```

### <b>((案2))仮想ディスプレイをインストール</b>

仮想ディスプレイをインストールして、仮想ディスプレイ上でChromeを動かします。

手順としては、
ーーーーーー
①仮想ディスプレイのxvfbをインストールする
②pythonからChromeを操作するために、seleniumとpyvirtualdisplayをインストールする
③pythonでChromeの起動プログラムを書く
ーーーーーー
です。

具体的な作業手順は、Step3に記載します。

# Step3) Google Chromeの起動
##<b>手順①)xvfbのインストール</b>
以下のコマンドで仮想ディスプレイのxvfbをインストールしました。

```CLI:xvfbのインストール
sudo apt-get install xvfb
sudo apt-get install unzip
wget -N http://chromedriver.storage.googleapis.com/2.20/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
chmod +x chromedriver
sudo mv -f chromedriver/usr/local/share/chromedriver
sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
```

##<b>手順②)selenium等のインストール</b>
python経由でChromeを操作するために、Chromeを操作するためのseleniumパッケージと仮想ディスプレイxvfbを操作するためのpyvirtualdisplayをインストールします。

Seleniumとは、WEBアプリケーションのテストツールの１つです。人がブラウザを操作する代わりにSeleniumがブラウザを操作をしてくれます。pyvirtualdisplayはpythonで仮想ディスプレイxvfbを操作するためのパッケージです。


以下のコードで両者をインストールしています。
（pip3をインストールしていなかったので事前にpip3をインストールしています。）

```
sudo apt-get install python3-setuptools
sudo easy_install3 pip
pip3 install pyvirtualdisplay selenium
```

##<b>手順③)xvfbのインストール</b>
以下のコードを実行しました。

```
from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()
browser = webdriver.Chrome()
browser.get('http://www.google.co.jp')
print(browser.title)

browser.quit()
display.stop()
```

上記のコードで戸惑うところはあまりないと思います。
1,2行目は仮想ディスプレイとseleniumを呼び出しています。

4行目は仮想ディスプレイを定義し、5行目で起動。
6行目の webdriver.Chrome()で、仮想ディスプレイ上でChromeを起動します。
7行目で google.co.jp のソースデータを取得し、
８行目で取得したページのtitleタグ要素を出力します。

これで一通り、ChromeをCLIのみで起動させる環境が整いました。

# 実際にスクレイピングをするには？

実際にスクレイピングをする時は、ChromeではなくPhantomJSを利用しています。
PhantomJSはヘッドレスブラウザであるため、仮想ディスプレイも不要ですし、Javascriptで書かれているコードもスクレイピングしているので重宝しています。
PhantomJSで作業をしたい場合は[こちら](http://qiita.com/gano/items/f46adc5dff055baf3785)をご確認ください。

とはいえ、Chromeの場合は、実際にブラウザがどのような挙動をするか見ながらテストをすることができるので、Chromeを使いたいこともあるでしょう。Chromeでスクレイピングをする場合は、[こちら](http://qiita.com/gano/items/6c599c531b0e68ac6414)のページにて、

```
browser = webdriver.PhantomJS(executable_path='')
```

の部分を 

```
browser= webdriver.Chrome() 
```

に置き換えて頂ければ動きます^^
（繰り返しですがJavascriptのコードはスクレイピングできないのでご注意ください。）