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/10/06 10:54時点 | Amazon調べ)
ポチップ