Web環境のPythonを使ってURLリストのフルスクリーンショットを保存する方法です。
この手順では、Seleniumを使用して各URLにアクセスし、
フルスクリーンのスクリーンショットを作成します。

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

まず、必要なライブラリをインストールします。
以下のコマンドを使用してSeleniumとWebドライバマネージャをインストールしてください。

pip install selenium webdriver-manager

スクリプト

URLリストを読み込み、各URLのフルスクリーンショットを保存するPythonスクリプトです。
capture_screenshot_comad.py

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import time
import sys
import os
from datetime import datetime

def take_full_screenshot(driver, file_name):
    original_size = driver.get_window_size()
    required_width = driver.execute_script('return document.body.parentNode.scrollWidth')
    required_height = driver.execute_script('return document.body.parentNode.scrollHeight')
    driver.set_window_size(required_width, required_height)
    time.sleep(1)  # ページが完全にレンダリングされるのを待つ
    driver.save_screenshot(file_name)
    driver.set_window_size(original_size['width'], original_size['height'])

def capture_screenshots(urls, browser_width, file_suffix):
    script_dir = os.path.dirname(os.path.abspath(__file__))
    output_dir = os.path.join(script_dir, file_suffix)
    log_file = os.path.join(output_dir, 'log.txt')

    # サブフォルダーの作成
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    log_entries = []
    
    log_entries.append(f"Execution Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    log_entries.append(f"Browser Width: {browser_width}")
    log_entries.append(f"File Suffix: {file_suffix}")

    # URLリストのサンプル表示
    if not urls:
        log_entries.append("No URLs provided.")
    else:
        log_entries.append(f"URLs to be captured: {', '.join(urls)}")

    options = webdriver.ChromeOptions()
    options.add_argument("--headless")  # ヘッドレスモードで実行
    options.add_argument("--disable-gpu")  # 追加のGPU使用を無効化
    options.add_argument("--ignore-certificate-errors")  # エラー無視
    options.add_argument("--allow-running-insecure-content")  # 互換モードを無効にする方法
    
    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
    driver.set_window_size(browser_width, 1000)  # ブラウザ幅を設定(高さは適宜設定)
    
    for idx, url in enumerate(urls):
        file_name = os.path.join(output_dir, f"{file_suffix}{idx+1:04d}.png")
        command = f"URL: {url}, File: {file_name}"
        
        if os.path.isfile(file_name):
            log_entries.append(f"Command Executed: {command} Skipped: File already exists.")
            continue
        
        try:
            driver.get(url)
            take_full_screenshot(driver, file_name)
            log_entries.append(f"Command Executed: {command} Success: Saved screenshot as {file_name}")
            print(f"Saved screenshot: {file_name}\n")
        except Exception as e:
            log_entries.append(f"Command Executed: {command} Error: {str(e)}")
    
    driver.quit()

    # ログファイルへの書き込み
    with open(log_file, 'w') as log:
        log.write('\n'.join(log_entries))

if __name__ == "__main__":
    if len(sys.argv) < 2:
        file_name = "url_list.txt"
    else:
        file_name = sys.argv[1]
    
    browser_width = int(sys.argv[2]) if len(sys.argv) > 2 else 1536
    file_suffix = sys.argv[3] if len(sys.argv) > 3 else 'screenshot_'

    # 起動コマンド内容の表示
    print(f"Command: python {sys.argv[0]} {file_name} {browser_width} {file_suffix}")

    # ファイルパスの設定
    if not os.path.isabs(file_name):
        file_name = os.path.join(os.path.dirname(os.path.abspath(__file__)), file_name)

    if not os.path.isfile(file_name):
        print(f"File not found: {file_name}")
        sys.exit(1)
    else:
        with open(file_name, 'r') as file:
            urls = [line.strip() for line in file.readlines()]

    capture_screenshots(urls, browser_width, file_suffix)

スクリプトの説明

  1. ライブラリのインポート: seleniumwebdriver_managerをインポートします。
  2. take_full_screenshot関数: ウィンドウサイズを調整してフルスクリーンショットを撮る関数です。
  3. capture_screenshots関数: URLリストを受け取り、各URLのスクリーンショットを撮るメイン関数です。
  4. Chromeオプションの設定: ヘッドレスモードでChromeを起動します。
  5. URLリストの読み込み: url_list.txtからURLを読み込みます。
  6. スクリーンショットの保存: 各URLのスクリーンショットを保存します。

実行方法

  1. 上記のスクリプトをPythonファイル(例: capture_screenshots.py)として保存します。
  2. url_list.txtというテキストファイルを作成し、各行に1つのURLを記入します。
  3. コマンドラインからスクリプトを実行します。
python capture_screenshot_comad.py

このスクリプトは、指定されたURLリストの各URLに対してフルスクリーンショットを保存します。
スクリーンショットは"screenshot_0001.png""screenshot_0002.png"のように保存されます。

Previous post WEBのフルスクリーンショットをまとめて撮る
Next post サイトチェックの仕方