DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

画面の無いVPSサーバーでSeleniumを使ってChromeブラウザを操作してみる

通常、ブラウザの操作は画面が無いと出来ません。

しかし、Seleniumを利用した自動操作はページ内要素を見ているので画面を必用としません。そういった画面の無いブラウザのことをヘッドレスブラウザと呼ぶのだそうです。

前回はラズパイでこのヘッドレスブラウザの起動テストをしました。

dreamerdream.hateblo.jp

 

 

今回はVPS上のCentOS7でヘッドレスブラウザを実行してみます。

やることは基本的に同じなのですがラズパイより少しだけ面倒です。

 

やることリスト

  • Sereniumのインストール
  • PyVirtualdisplayのインストール
  • GoogleChromeのインストール
  • ChromeDriverのインストール
  • 日本語フォントのインストール

 

Seleniumをpipからインストール

sudo pip3 install selenium

 

Xが元々インストールされていないので仮想画面が必用です。

Pyバーチャルディスプレイをインストール

sudo pip3 install pyvirtualdisplay

 

GoogleChromeをインストール

下記にファイルを作成

sudo nano /etc/yum.repos.d/google-chrome.repo

中身は↓をコピペ

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

するとyumでインストールできるようになります。

sudo yum install -y google-chrome-stable

ズララララ〜〜〜とパッケージがインストールされて、

無事

Complete!

が出たら終了。

バージョン確認

google-chrome -version
Google Chrome 73.0.3683.103

 

 

ChromeDriverのインストール

Downloads - ChromeDriver - WebDriver for Chrome

で、最新情報を確認しましょう。(上のChromeのバージョンに合ったものをダウンロードしましょう)

zipファイルのダウンロード

wget https://chromedriver.storage.googleapis.com/73.0.3683.68/chromedriver_linux64.zip

展開

unzip chromedriver_linux64.zip

移動

sudo mv chromedriver /usr/local/bin/

権限変更

sudo chmod 755 /usr/local/bin/chromedriver

 

以上で準備完了です。

 

 

<参考サイト>

CentOS7にGoogle Chromeを簡単にインストールする方法 | カレリエ

CentOSにSeleniumとGoogle Chrome & ChromeDriverをインストールする | work.log

 

 

テストプログラムを組みます。

 -- selenium_test.py --

import time
from selenium import webdriver

chrome_option = webdriver.ChromeOptions()
chrome_option.add_argument('--headless')
chrome_option.add_argument('--disable-gpu')

driver = webdriver.Chrome(chrome_options=chrome_option)
driver.get('https://www.google.com/')
time.sleep(3)

driver.save_screenshot('/home/mitsu/screenshot0.png')

search_box = driver.find_element_by_name("q")
search_box.send_keys('せんと君')

driver.save_screenshot('/home/mitsu/screenshot1.png')

search_box.submit()
time.sleep(2)

driver.save_screenshot('/home/mitsu/screenshot2.png')

driver.quit()

 なぜ検索が「せんと君」かって?そりゃCentOSだからですヨ。

 

あと、前回ラズパイのときはjpg保存でも何も言われなかったのですが、今回はスクショはpng推奨です。みたいな警告が出たのでpng保存してます。

 

スクショでブラウザの動向を見てみると、グーグル窓が開いてー

f:id:DreamerDream:20190423105818p:plain

あうぅ!文字化けしまくってる!!すごく豆腐文字・・けど一応検索できています。

f:id:DreamerDream:20190423105041p:plain

 

まあそもそも画面が無いのでフォントを入れていないんですよねー

てことで日本語フォントをインストールします。

sudo yum install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

OK! 今度はちゃんと日本語表示されています!

f:id:DreamerDream:20190423105920p:plain

f:id:DreamerDream:20190423105941p:plain

 

 

<参考サイト>フォントインストール

https://altarf.net/computer/server_tips/3874

 

 

おし!完了。

これを利用すればWebページのスクレイピングや監視などが24時間体制で出来ます。

 

なお、現在ブラウザの状態を確認するには、上のコードのスクショ保存先を

/var/www/imgs/screenshot.png

などとし、Apacheで静的なWebページを作って間欠的に.pngファイルを読み出すようなタグを組んでアクセスすればブラウザが現在どういう状況なのか、簡単に確認することができます。

例)screenshot.html 1秒毎に画像更新されるHTMLコード

<html>
<body>
<meta http-equiv="refresh" content="1" >
<img src="/imgs/screenshot.png">
</body>
</html>

 

今回は以上です。

 

[追記]システムアップデート

yum update をすると
google-chrome-stable.がバージョンアップされます。

そのまま実行すると、

ception: Message: session not created: Chrome version must be between 70 and 73
(Driver info: chromedriver=73.0.3683.68 (47787ev12v6e38e2027856er3jio3e8404353fe72),platform=Linux 3.0.0-900.1.3.il7.x86_64 x86_64)

というようなメッセージが出て起動できません。

上記で書いたChromeDriverChromeのバージョンに合わせてバージョンアップさせましょう。

kampa.me