google chrome for linux は、gui 環境でのみ利用できると思っていましたが、 headless モードであれば、利用できるらしく、驚いた。
- install python 3.8 from source & selenium 4
- install google chrome via yum & font
- install chromedriver
- selenium4 for python3 による 動作確認
install python 3.8 from source & selenium 4
2022/5現在のseleniumの最新は、ver.4.1.5ですが cent7に付属するpython 3.6 では、selenium 4.0.0a7 が最新のようですので python 3.8をsourceからインストール。
$ sudo yum install libffi-devel $ wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz $ tar -xvf Python-3.8.13.tgz $ cd Python-3.8.13 $ less README.rst $ ./configure $ make $ make test $ sudo make install $ /usr/local/bin/python3 --version Python 3.8.13 $ sudo /usr/local/bin/pip3 install selenium==4.1.5
install google chrome via yum & font
install google chrome
$ cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
repository追加
$ sudo vi /etc/yum.repos.d/google.chrome.repo [google-chrome] name=google-chrome baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch enabled=1 gpgcheck=1 gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub https://rin-ka.net/centos-google-chrome-install/
$ sudo yum install google-chrome-stable $ google-chrome --version Google Chrome 101.0.4951.54
install 日本語 font
$ sudo yum install ipa-gothic-fonts ipa-mincho-fonts \ ipa-pgothic-fonts ipa-pmincho-fonts
google-chrome --headless コマンドによる動作確認
以下で、chromeがheadlessモードで起動し、画面キャプチャを取得できます
$ google-chrome --headless \ --window-size=1200,1600 \ --no-sandbox \ --screenshot=screen_capture.png \ https://www.yahoo.co.jp/
install chromedriver
と言っても、いつも通り、download & 解凍のみです
$ https://chromedriver.storage.googleapis.com/101.0.4951.41/chromedriver_linux64.zip $ unzip chromedriver_linux64.zip
selenium4 for python3 による 動作確認
#!python3 # -*- coding: utf-8 -*- import getopt import sys import os from selenium import webdriver # ex. pip install selenium==4.0.0a7 from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service driver_path = os.path.join( os.getcwd(), 'chromedriver') browser_conf = { "browser_options" : [ "--headless", "--enable-logging=False", #以下、3行はSSLエラー対策らしい "--ignore-certificate-errors", "--disable-extensions", "--disable-print-preview"], "implicitly_wait": 10 } def main(): browser = init_browser() browser.get("https://www.yahoo.co.jp") size_w = browser.execute_script("return document.body.scrollWidth;") size_h = browser.execute_script("return document.body.scrollHeight;") browser.set_window_size(size_w, size_h) browser.save_screenshot("./screenshot.png") browser.close() def init_browser(): browser_service = Service( executable_path=driver_path ) browser_opts = Options() for tmp_opt in browser_conf["browser_options"]: browser_opts.add_argument( tmp_opt ) browser = webdriver.Edge(service = browser_service, options = browser_opts ) # 要素が見つかるまで、最大 ?秒 待つ browser.implicitly_wait( browser_conf["implicitly_wait"] ) return browser if __name__ == '__main__': main()