はじめに
久しぶりの投稿となってしまいました。
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) 日本語の文字化け
その(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
プログラムを再実行すると文字化けが直っています。
警告抑止(プログラム改修)
①ドライバーのパスを、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')