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

# はじめに

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

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

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

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

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

```bash
yum update -y
dnf install -y  python38
dnf install -y  unzip
```

```bash
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のインストール
```bash
pip install --upgrade pip
pip install --upgrade setuptools
pip install selenium
```

## Chromeのインストール
```bash
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
```
### バージョン確認
```bash
google-chrome --version
```
## Chrome Driverのインストール
```bash
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ページのキャプチャ)

```python: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530912/026cdd3d-bc17-e7b3-eadf-87d65c915cff.png)

## その(2) 警告メッセージの抑止
```bash
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 のインストール

```bash
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530912/9270cbdc-b5e9-6fdf-61ed-922adc3e3900.png)


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

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

```python: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')
```