見出し画像

150 YouTubeのスクリーンショットを白黒画像にして保存!Python×Selenium×Pillowで簡単自動化

はじめに

こんにちは!TechCommitメンバーの友季子です♬
今回は、PythonのSeleniumを使ってYouTubeの動画ページにアクセスし、スクリーンショットを白黒画像に変換して保存する方法について解説します!
プログラミング初学者や、初級エンジニアの方にわかりやすく解説していきますので、ぜひ最後まで読んでくださいね😊

「ちょっとした作業を自動化したい!」「Pythonを使ってスクリーンショットを加工してみたい!」という方にお役立ち情報をお届けします✨


0. コードの流れ

このプログラムを実行すると、以下のことが自動的に行われます。

0.ゆきまるさんのYouTube動画ページにアクセス。

※カッコイイ恋愛系ユーチューバーさんです💗長髪男子好きな方は一緒に推しましょう♪

  1. 動画が表示されるのを待機。

  2. ページ全体のスクリーンショットを撮影。

  3. スクリーンショットを白黒に変換。

  4. 白黒画像を「ゆきまるさん白黒_YYYY-MM-DD.png」として保存。

  5. 最後にブラウザを閉じる。


1. 開発準備しよう!🛠

1.1 必要なツールとライブラリ

まずはPythonがインストールされていない方は、Python公式サイトからインストールしましょう!

1.2 必要なライブラリのインストール

今回使うライブラリは以下の3つです:

  • Selenium:ブラウザを自動操作するためのライブラリ

  • webdriver-manager:ChromeDriverを自動管理するためのライブラリ

  • Pillow (PIL):画像の加工を行うためのライブラリ

以下のコマンドをターミナル(またはコマンドプロンプト)で実行して、必要なライブラリをインストールしましょう!

pip install selenium webdriver-manager pillow

2. コードを書いてみよう!🖥️

ここからはYouTubeの動画ページにアクセスし、スクリーンショットを撮影して白黒画像に変換して保存するPythonコードを紹介します!


2.1 コード全体と一行ずつの解説

2.2 コード全体

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from PIL import Image
import io
from datetime import datetime

# Seleniumでブラウザを起動
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# YouTube動画ページにアクセス
url = "https://www.youtube.com/watch?v=j149xpasByg"
driver.get(url)

try:
    # 明示的な待機を使用して、動画プレイヤー要素が見つかるまで待機
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'video.html5-main-video'))
    )
    
    # スクリーンショットを撮る
    screenshot = driver.get_screenshot_as_png()

    # Pillowで画像を読み込む
    image = Image.open(io.BytesIO(screenshot))

    # 画像を白黒(グレースケール)に変換
    grayscale_image = image.convert("L")

    # 今日の日付を取得し、ファイル名に使用
    today = datetime.now().strftime("%Y-%m-%d")
    filename = f"ゆきまるさん白黒_{today}.png"

    # 白黒に変換した画像を保存
    grayscale_image.save(filename)

    print(f"白黒の画像を '{filename}' として保存しました。")

except Exception as e:
    print(f"Error: {e}")

finally:
    # ブラウザを閉じる
    driver.quit()

2.3 解説

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from PIL import Image
import io
from datetime import datetime

# 1. Chromeブラウザを起動
# ChromeDriverManagerを使用して、ChromeDriverを自動的にインストールし、Chromeブラウザを起動します
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 2. YouTube動画ページにアクセス
# YouTubeの特定の動画URLを開きます
url = "https://www.youtube.com/watch?v=j149xpasByg"
driver.get(url)

try:
    # 3. 動画プレイヤーが見つかるまで最大10秒待機
    # CSSセレクタ 'video.html5-main-video' で動画プレイヤーを探し、見つかるまで最大10秒間待機します
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'video.html5-main-video'))
    )
    
    # 4. ページ全体のスクリーンショットをPNG形式で取得
    # ブラウザ全体のスクリーンショットを撮影し、PNG形式のバイナリデータとして取得します
    screenshot = driver.get_screenshot_as_png()

    # 5. Pillowでスクリーンショット画像を読み込む
    # io.BytesIOを使ってスクリーンショットのバイナリデータをPillowで開き、画像オブジェクトとして読み込みます
    image = Image.open(io.BytesIO(screenshot))

    # 6. 画像を白黒(グレースケール)に変換
    # Pillowのconvertメソッドを使って、画像を白黒(グレースケール)に変換します
    grayscale_image = image.convert("L")

    # 7. 現在の日付を取得して、ファイル名に使用
    # 現在の日付を 'YYYY-MM-DD' 形式で取得し、ファイル名に組み込みます
    today = datetime.now().strftime("%Y-%m-%d")
    filename = f"ゆきまるさん白黒_{today}.png"

    # 8. 白黒画像を保存
    # 変換した白黒画像を、指定したファイル名でPNG形式として保存します
    grayscale_image.save(filename)

    # 9. 画像保存完了メッセージを表示
    # 保存が成功したことを示すメッセージをコンソールに出力します
    print(f"白黒の画像を '{filename}' として保存しました。")

except Exception as e:
    # 10. エラーメッセージを表示
    # 何らかのエラーが発生した場合、そのエラーメッセージをコンソールに表示します
    print(f"Error: {e}")

finally:
    # 11. ブラウザを閉じる
    # ブラウザを閉じて、すべてのリソースを解放します
    driver.quit()

コメント付きの詳細説明

  • 目的: このスクリプトは、YouTubeの特定の動画ページにアクセスし、ブラウザ全体のスクリーンショットを撮って、白黒画像に変換して保存するという処理を行います。

  • Selenium を使用してブラウザを自動操作し、 Pillow (PIL) を使って画像処理を行っています。

  • エラーハンドリング(try-except構文)を用いて、エラー発生時にメッセージを表示し、最後にはブラウザを閉じる処理が必ず実行されるようになっています。

各ステップの詳細

  1. ブラウザの起動: SeleniumがChromeDriverを使ってブラウザを開きます。

  2. YouTubeの動画ページに移動: 指定されたURLのページにアクセスします。

  3. 要素の待機: 動画プレイヤーがロードされるまで最大10秒間待ちます。

  4. スクリーンショットの取得: 現在のブラウザ画面全体のスクリーンショットをPNG形式で取得します。

  5. 画像の読み込み: スクリーンショットデータをPillowライブラリで画像として読み込みます。

  6. 白黒画像に変換: 読み込んだ画像を白黒(グレースケール)に変換します。

  7. 日付の取得: 画像ファイル名に現在の日付を含めるため、日付を取得します。

  8. 画像の保存: 変換した白黒画像をファイルとして保存します。

  9. 成功メッセージの表示: 画像が正常に保存されたことを通知します。

  10. エラーメッセージの表示: 処理中にエラーが発生した場合、その内容を表示します。

  11. ブラウザの終了: 最後に必ずブラウザを閉じてリソースを解放します。


2.4 各ステップの重要な箇所をコードで解説📝

1. ライブラリのインポート

  • selenium でブラウザ操作を行い、Pillow で画像処理を行うために必要なライブラリをインポートしています。

2. ブラウザを起動してYouTubeにアクセス

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)
  • webdriver.Chrome() でChromeブラウザを起動し、指定したYouTube動画URLにアクセスします。

3. 動画プレイヤーが読み込まれるまで待機

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'video.html5-main-video'))
)
  • WebDriverWait を使って、YouTubeの動画プレイヤーが見つかるまで最大10秒待機します。

4. スクリーンショットを撮る

screenshot = driver.get_screenshot_as_png()
  • ブラウザ全体のスクリーンショットをPNG形式で取得します。

5. スクリーンショットをPillowで開く

image = Image.open(io.BytesIO(screenshot))
  • Pillow の Image.open() メソッドを使い、バイナリデータから画像オブジェクトを作成します。

6. 白黒(グレースケール)に変換

grayscale_image = image.convert("L")
  • 【大事】convert("L") を使って画像を白黒(グレースケール)に変換します。

7. ファイル名に日付を付ける

today = datetime.now().strftime("%Y-%m-%d")
filename = f"ゆきまるさん白黒_{today}.png"
  • datetime.now() で今日の日付を取得し、strftime で YYYY-MM-DD 形式に整形してファイル名に使用します。

8. 白黒画像を保存

grayscale_image.save(filename)
  • 変換した白黒画像を保存します。

9. 保存完了メッセージを表示

print(f"白黒の画像を '{filename}' として保存しました。")
  • 保存が成功したことをコンソールにメッセージとして表示します。

10. エラー処理

except Exception as e:
    print(f"Error: {e}")
  • 何か問題が発生した場合、エラー内容を表示します。

11. ブラウザを閉じる

finally:
    driver.quit()
  • finally ブロックで必ずブラウザを閉じて、リソースを解放します。


3. 実行してみよう!🚀

3.1 実行手順

  1. このコードを「screenshot_youtube.py」という名前で保存してください。※名称は任意です。

  2. ターミナル(またはコマンドプロンプト)を開き、以下のコマンドを入力して実行します。

python screenshot_youtube.py
  1. 正しく動作すれば、カレントフォルダに「ゆきまるさん白黒_YYYY-MM-DD.png」というファイル名で白黒画像が保存されます。


4. まとめ📋

いかがでしたか?今回はPythonを使ってYouTubeの動画ページのスクリーンショットを白黒画像に変換して保存する方法をご紹介しました。

  • Seleniumを使ってブラウザを操作し、

  • Pillowで画像を加工する。

これらの技術を組み合わせることで、簡単な自動化や画像処理ができるようになります。ぜひ、皆さんも自分のアイデアを元に新しいプログラムを作ってみてくださいね😊


終わりに

この内容が少しでもお役に立てれば嬉しいです!

#Python #Selenium #Pillow #自動化 #YouTubeスクリーンショット #ゆきまるさん好きと繋がりたい

いいなと思ったら応援しよう!