通常、ブラウザの操作は画面が無いと出来ません。
しかし、Seleniumを利用した自動操作はページ内要素を見ているので画面を必用としません。そういった画面の無いブラウザのことをヘッドレスブラウザと呼ぶのだそうです。
前回はラズパイでこのヘッドレスブラウザの起動テストをしました。
今回はVPS上のCentOS7でヘッドレスブラウザを実行してみます。
やることは基本的に同じなのですがラズパイより少しだけ面倒です。
やることリスト
- Sereniumのインストール
- PyVirtualdisplayのインストール
- GoogleChromeのインストール
- ChromeDriverのインストール
- 日本語フォントのインストール
Seleniumをpipからインストール
sudo pip3 install selenium
Xが元々インストールされていないので仮想画面が必用です。
Pyバーチャルディスプレイをインストール
sudo pip3 install pyvirtualdisplay
GoogleChromeをインストール
下記にファイルを作成
中身は↓をコピペ
[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でインストールできるようになります。
ズララララ〜〜〜とパッケージがインストールされて、
無事
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 webdriverchrome_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保存してます。
スクショでブラウザの動向を見てみると、グーグル窓が開いてー
あうぅ!文字化けしまくってる!!すごく豆腐文字・・けど一応検索できています。
まあそもそも画面が無いのでフォントを入れていないんですよねー
てことで日本語フォントをインストールします。
sudo yum install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts
OK! 今度はちゃんと日本語表示されています!
<参考サイト>フォントインストール
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)
というようなメッセージが出て起動できません。
上記で書いたChromeDriverをChromeのバージョンに合わせてバージョンアップさせましょう。