Help us understand the problem. What is going on with this article?

UbuntuのCLI環境でGoogleChromeを使ってウェブサイトのスクリーンショットを取得する

More than 1 year has passed since last update.

今回はChromeのHeadlessモードを使うのではなく、CLI環境でも通常のChromeが動作するようにpyvirtualdisplayの仮想ディスプレイを使った方法でスクレイピングを行う。

使ったもの

  • Python3
  • Google Chrome
  • ChromeDriver
  • xvfb
  • Selenium
  • pyvirtualdisplay

使わないもの

  • ChromeのHeadlessモード

前提

ubuntu 16.04 LTS上の環境を想定しています。

環境構築

Seleniumをインストールする。

プリインストールされてるPython3を使うので、pip3をインストールする。

sudo apt install python3-pip python3-dev

pip3でSeleniumをインストールする。

$ pip3 install selenium

libgconf2-4をインストールする。(Seleniumの起動に必要)

$ sudo apt install libgconf2-4

Google Cromeをインストールする。

depファイルをダウンロードして、インストールする。

$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 
$ sudo dpkg -i google-chrome-stable_current_amd64.deb

必要な依存ファイルをaptでインストールする。

$ sudo apt update 
$ sudo apt -f install -y

インストールと配置場所を確認する。

$ which google-chrome 
/usr/bin/google-chrome

ChromeDriverをインストールする。

zipファイルで提供されているので、unzipをインストールする。

$ sudo apt install unzip

zipファイルをダウンロードして、展開する。

$ wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip
$ unzip chromedriver_linux64.zip -d ~/bin/

実行ファイルの配置場所にPATHを通す。

$ export PATH=$PATH:$HOME/bin

インストールされていることを確認する。

$ which chromedriver 
/home/hoge/bin/chromedriver

xvfbをインストールする。

pyvirtualdisplayの実行に必要なのでxvfbをインストールする。

$ sudo apt-get install -y xvfb

pyvirtualdisplayをインストールする

pyvirtualdisplayをpip3でインストールする。

pip3 install pyvirtualdisplay

日本語ページが文字化けしないように日本語フォントをインストールする。

日本語フォントをインストールする

$ wget --content-disposition IPAfont00303.zip http://ipafont.ipa.go.jp/old/ipafont/IPAfont00303.php 
$ sudo unzip IPAfont00303.zip -d /usr/share/fonts/
$ fc-cache -fv

検証

ソースコード

google.py

from selenium import webdriver
from pyvirtualdisplay import Display

display = Display(visible=0, size=(1024, 768))
display.start()

driver = webdriver.Chrome()
driver.set_window_size(1024, 768)

driver.get('https://www.google.com')

driver.save_screenshot("screenshot.png")

driver.quit()
display.stop()

上記をpython3で実行する。

$ python3 google.py

実行結果

無事Googleの検索ページのスクリーンショットが撮れました。

screenshot.png

参考記事

https://qiita.com/shinsaka/items/37436e256c813d277d6d
https://stackoverflow.com/questions/45370018/selenium-working-with-chrome-but-not-headless-chrome
http://b.ytyng.com/blog/python-selenium-chromedriver-error-127-install-libgconf2/

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away