RockyLinux 8 にヘッドレス環境を準備する
RockyLinux
OS: Rocky Linux 8.9
(Minumumインストール)
※ Xwindowsは導入していない
App: Python 3.8.17
google-chrome 122.0.6238.2
Selenium 4.16.0
インストール
google-chrome
# 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
# dnf install google-chrome
python3/pip
# dnf install python38.x86_64 python38-pip.noarch
# dnf module list | grep python
libselinux-python 2.8 common Python 2 bindings for libselinux python27 2.7 [d] common [d] Python programming language, version 2.7 python36 3.6 [d] build, common [d] Python programming language, version 3.6 python38 3.8 [d][e] build, common [d] Python programming language, version 3.8 python39 3.9 [d] build, common [d] Python programming language, version 3.9
python3.8が[e] enableとなっている。
# python3 -V
Python 3.8.17
/usr/bin/python を、python3.8としたい場合は、
# update-alternatives –config python
にて選択する。
chromedriver/selenium
# google-chrome –version
Google Chrome 122.0.6238.2 dev
# pip3 install chromedriver_binary==122.*
# pip3 install selenium
google-chromeは更新頻度が高いので、update時はバージョンをチェックすること。
pipでのインストール一覧コマンドは、
# pip3 list
簡易確認
XWindowを導入していない為、ブラウザが動作している経過は確認できない
手間ではあるが、スクリーンショット(画像)を保存して、画像をscp転送して確認する
ハマった時には、画像確認を容易にする為に、WEBサーバーやsambaなどを経由して確認したほうが楽かも・・・
$ vi test.py
<codedoc code:python>
from selenium import webdriver
import chromedriver_binary
options = webdriver.ChromeOptions()
options.add_argument('–headless')
options.add_argument('–no-sandbox')
driver = webdriver.Chrome(options=options)
driver.set_window_size(1200, 720)
driver.get(“https://www.google.co.jp/”)
# スクショ 保存
driver.save_screenshot('screenshot01.png')
driver.quit()
</codedoc>
$ python3 ./test.py
実行後のscreenshot01.pngを確認する
chromeが起動している様子を画像として確認出来たが、文字化けしている。
日本語フォントのインストール
# dnf install google-noto-sans-cjk-ttc-fonts.noarch google-noto-serif-cjk-ttc-fonts.noarch google-noto-cjk-fonts-common.noarch
# fc-cache -fv
最終確認
$ vi test2.py
<codedoc code:python>
from selenium import webdriver
import chromedriver_binary
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument('–headless')
options.add_argument('–no-sandbox')
driver = webdriver.Chrome(options=options)
driver.set_window_size(1200, 720)
driver.get(“https://www.google.co.jp/”)
# スクショ 保存
driver.save_screenshot('screenshot01.png')
query = driver.find_element(By.NAME, “q”)
query.send_keys(“test123”)
driver.save_screenshot('screenshot02.png')
query.send_keys(Keys.RETURN)
driver.save_screenshot('screenshot03.png')
driver.quit()
</codedoc>
$ $ python3 ./test.py