1
0

More than 1 year has passed since last update.

【Python覚書】selenium on centos stream 8(001)_環境構築~画面キャプチャまで

Last updated at Posted at 2021-12-31

はじめに

久しぶりの投稿となってしまいました。

pythonは情報がたくさんあるし、多機能なので随分勉強してきたのですが、いかんせん量が多すぎて「昔作ったことがあるのに!」「あれどういうふうにやったっけ!?」と悔しい思いをすることが多々あります。

そういった自戒を込めて自身の学習記録を投稿したいと思います。
(自分用のメモだと、どうしても「覚えてられるだろ」という謎の自信を持ってしまうので、情報を共有しようとする気持ちでないと、記録をするモチベーションが保たない…)

python環境構築(CentOS Streamへインストール)

必要パッケージのインストール

yum update -y
dnf install -y  python38
dnf install -y  unzip
alternatives --config python

3 プログラムがあり 'python' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/libexec/no-python
   2           /usr/bin/python3
   3           /usr/bin/python3.8

[3]を選択


update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

seleniumのインストール

pip install --upgrade pip
pip install --upgrade setuptools
pip install selenium

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 -y google-chrome-stable

バージョン確認

google-chrome --version

Chrome Driverのインストール

wget https://chromedriver.storage.googleapis.com/96.0.4664.45/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
mv chromedriver /usr/local/bin/
chmod 755 /usr/local/bin/chromedriver
rm -f chromedriver_linux64.zip

サンプルプログラムの実行(Webページのキャプチャ)

study_pyton.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

from time import sleep

options = Options()
options.add_argument('--headless')
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(executable_path=r"/usr/local/bin/chromedriver",options=options)

# ウィンドウサイズを設定
driver.set_window_size(1280, 720)

# 対象のページを指定
driver.get('https://qiita.com/o_chan_t')
sleep(5)

# キャプチャするページの幅
my_width = driver.execute_script('return document.body.scrollWidth')
# キャプチャするページの高さ
my_height = driver.execute_script('return document.body.scrollHeight')
# 保存するウィンドウサイズ(画像サイズ)
driver.set_window_size(my_width, my_height)

driver.save_screenshot('Qiita_MyPage_Capture.png')

問題点

はい。簡単に出来ました。
と言いたいところですが、この短いコードでも解消すべき点が残っていますね。。。

その(1) 日本語の文字化け

Qiita_MyPage_Capture2.png

その(2) 警告メッセージの抑止

study_pyton.py:9: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(executable_path=r"/usr/local/bin/chromedriver",options=options)

という警告が出てしまう

問題対策

Google Noto Fonts のインストール

wget https://noto-website-2.storage.googleapis.com/pkgs/Noto-hinted.zip
mkdir Noto-works
unzip -d Noto-works Noto-hinted.zip
cd Noto-works
mkdir -p /usr/share/fonts/opentype/noto
cp *otf *ttf /usr/share/fonts/opentype/noto
fc-cache -fv
cd ..
rm -rf Noto-works
rm -f Noto-hinted.zip

プログラムを再実行すると文字化けが直っています。

Qiita_MyPage_Capture3.png

警告抑止(プログラム改修)

①ドライバーのパスを、Serviceオブジェクトの利用して読み込む
②webdriver.Chrome関数内でoptionsオプションを明記する
の2点対応すれば解消しました。

study_pyton_Fix01.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome import service as fs

from time import sleep

options = Options()
options.add_argument('--headless')
options.add_argument("--no-sandbox")

# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path="/usr/local/bin/chromedriver")  # 修正箇所
driver = webdriver.Chrome(service=chrome_service, options=options)  # 修正箇所

# ウィンドウサイズを設定
driver.set_window_size(1280, 720)

# 対象のページを指定
driver.get('https://qiita.com/o_chan_t')
sleep(5)

# キャプチャするページの幅
my_width = driver.execute_script('return document.body.scrollWidth')
# キャプチャするページの高さ
my_height = driver.execute_script('return document.body.scrollHeight')
# 保存するウィンドウサイズ(画像サイズ)
driver.set_window_size(my_width, my_height)

driver.save_screenshot('Qiita_MyPage_Capture.png')
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0