search
LoginSignup
17

More than 5 years have passed since last update.

posted at

updated at

さくら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とコマンドを打つことで、起動できますが、この状態で起動をすると2つの問題が発生しました。
その2つは、
1)依存関係が壊れていること。
2)(当然ですが)画面が無いこと。
です。対処した内容を以下に示します。

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

問題1) 依存関係の修復

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

sudo apt-get update
sudo apt-get -f install

問題2)画面がない

((案1)) GUIデスクトップ

以下のコマンドでGUIデスクトップをインストールすることができますが、時間が長くかかりそうなので途中で止めました。

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

((案2))仮想ディスプレイをインストール

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

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

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

Step3) Google Chromeの起動

手順①)xvfbのインストール

以下のコマンドで仮想ディスプレイのxvfbをインストールしました。

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

手順②)selenium等のインストール

python経由でChromeを操作するために、Chromeを操作するためのseleniumパッケージと仮想ディスプレイxvfbを操作するためのpyvirtualdisplayをインストールします。

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

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

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

手順③)xvfbのインストール

以下のコードを実行しました。

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 のソースデータを取得し、
8行目で取得したページのtitleタグ要素を出力します。

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

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

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

とはいえ、Chromeの場合は、実際にブラウザがどのような挙動をするか見ながらテストをすることができるので、Chromeを使いたいこともあるでしょう。Chromeでスクレイピングをする場合は、こちらのページにて、

browser = webdriver.PhantomJS(executable_path='')

の部分を

browser= webdriver.Chrome() 

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
17