tabimoba.net

とあるエンジニアの雑記帳

Python3とSeleniumとGoogle ChromeでWebページのスクリーンショットはSelenium-Screenshotが便利です

Python 3とSeleniumとGoogle ChromeでWebページのスクリーンショットを取得する方法の1つとして、Selenium標準の save_screenshot メソッドを使う方法がありますが、この方法の場合、指定されたサイズ(ウインドウサイズ)のスクリーンショットを取得することはできますが、Webページ全体のスクリーンショットを取得することはできません。

Googleで検索してみると、色々な方法がヒットしますが、最も簡単で、かつ再利用性の高い方法は、Selenium-Screenshotパッケージを使う方法です。Selenium-Screenshotパッケージを使用すると、簡単にWebページ全体のスクリーンショットや、HTML要素を指定したスクリーンショットを取得することができます。

インストール

1.Python3のダウンロードとインストール

Windowsの場合は、下記URLよりインストーラーをダウンロードしてインストールする方法が簡単です。 https://www.python.jp/

LinuxやMac, FreeBSDなどでは、パッケージマネージャからインストールします。 例えば、Ubuntu 18.04LTSの場合はちょっと古いですが(実行時にDeprecatedが出るかも知れませんが)以下が参考になるでしょう。 Ubuntu 18.04LTSとchromium-browser(Headless)とpython3でSeleniumする

Pythonのバージョン複数分けて使いたい場合は、pythonbrewのようなvirtualenvっぽい何かを利用したり、Dockerで環境を分けるのが良いでしょう。

2.パッケージのインストール

seleniumと、Selenium-Screenshotパッケージをインストールします。

pip install selenium
pip install Selenium-Screenshot

3.ChromeDriverのダウンロード

下記URLより、自分の環境(Chromeのバージョン)に合ったChromeDriverをダウンロードします。 https://chromedriver.chromium.org/downloads

なお、Windows以外でパッケージマネージャよりSeleniumをインストールした場合は、パッケージマネージャよりChromeDriverをインストール出来る場合があります。その場合は、特別な事情(パッケージマネージャよりインストールされるものが満足に動作しない、機能が足りない等)を除き、可能な限りパッケージマネージャよりインストールされるものを使用するのが良いでしょう。

コード例

以下はWindowsで、https://www.asahi.com/ のスクリーンショットを取得する例です。 なお、ChromeDriver(chromedriver.exe)はPythonスクリプトと同じフォルダ(ディレクトリ)にあることを、ここでは想定しています。 環境に合わせて、executable_path(ChromeDriverのパス)を変更することで、Windowsに限らず他のOSでも動作します。

from Screenshot import Screenshot_Clipping
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')

ob=Screenshot_Clipping.Screenshot()
driver = webdriver.Chrome(executable_path=r".\chromedriver.exe", options=options)
driver.set_window_size(1280, 720)

driver.get("https://www.asahi.com/")
ob.full_Screenshot(driver, save_path=r'.', image_name='Myimage.png')

driver.close()
driver.quit()

上記Pythonスクリプトを実行すると、Myimage.pngというファイル名でスクリーンショット画像が出力されます。 その画像を開くと、以下のようにWebページ全体のスクリーンショットを確認することができます。 f:id:tabimoba:20200402021843p:plain

参考