記事内に広告が含まれています。

【Python】特定の要素のスクリーンショットを撮影する(Selenium,Pillow)

【Python】特定の要素部分のスクリーンショットを撮影・保存する(Selenium,Pillow) IT
IT

Seleniumでブラウザを自動操作している際に、ある要素のスクリーンショットを撮影し保存します。

撮影したスクリーンショットを保存するためにライブラリはPillowを使用します。

スポンサーリンク
     

特定の要素のスクリーンショットを撮影・保存する方法

さっそく答えから書いておきます。

from selenium import webdriver
from PIL import Image
import io

# Selenium WebDriverのインスタンスを作成
driver = webdriver.Chrome()

# 要素までスクロールするためのJavaScriptコード
scroll_to_element_script = """
var element = arguments[0];
element.scrollIntoView(true);
"""

# 要素を特定して取得
element = driver.find_element_by_css_selector("Your_CSS_Selector")

# 要素までスクロールする
driver.execute_script(scroll_to_element_script, element)

# 要素のスクリーンショットを撮影
element_screenshot = element.screenshot_as_png

# スクリーンショットをPillowのImageオブジェクトに変換
image = Image.open(io.BytesIO(element_screenshot))

# 画像を保存
image.save("screenshot.png")

# WebDriverを終了
driver.quit()

“Your_CSS_Selector”の部分にスクロールさせたい要素を特定するためのCSSセレクターに置き換えてください。
classでは特定不可な場合は、xpathなどで特定してください。

要素までスクロールしないと上手くスクショが撮れなかったので、スクロールの処理を入れています。

     

このコードの説明

  • from selenium import webdriver
    Seleniumライブラリからwebdriverモジュールをインポートします。
    これはSeleniumのWebドライバー(ブラウザ)を操作するために使用します。
  • from PIL import Image
    PillowライブラリからImageクラスをインポートします。このクラスは、画像を扱うためのクラスです。
  • import io
    入出力を扱うための標準ライブラリからioモジュールをインポートします。
  • scroll_to_element_script = “”” … “””
    JavaScriptのコードをマルチライン文字列で定義します。このコードは、指定された要素までページをスクロールするために使用されます。
  • element = driver.find_element_by_css_selector(“Your_CSS_Selector”)
    driverオブジェクトのfind_element_by_css_selector()メソッドを使用して、指定されたCSSセレクターに一致する要素を取得します。
    “Your_CSS_Selector”はスクロールさせたい要素を一意に特定するためのCSSセレクターに置き換える必要があります。
  • element_screenshot = element.screenshot_as_png
    elementオブジェクトのscreenshot_as_png属性を使用して、要素のスクリーンショットをPNG形式で取得します。
    このメソッドはSelenium 4以降で使用できます。
  • image = Image.open(io.BytesIO(element_screenshot))
    io.BytesIO()関数を使用して、メモリ内のバイナリデータを扱います。そして、PillowライブラリのImage.open()関数を使用して、バイナリデータから画像を開きます。
    これにより、要素のスクリーンショットがImageオブジェクトとして扱われます。
  • image.save(“screenshot.png”)
    この行では、Imageオブジェクトのsave()メソッドを使用して、画像をファイルに保存しています。
    ここで指定されているファイル名はscreenshot.pngですが、必要に応じて変更することができます。
    保存された画像は、指定されたファイル名で現在の作業ディレクトリに保存されます。
¥2,455 (2024/06/17 09:23時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング