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)
スクリプトの説明
- ライブラリのインポート:
selenium
とwebdriver_manager
をインポートします。 take_full_screenshot
関数: ウィンドウサイズを調整してフルスクリーンショットを撮る関数です。capture_screenshots
関数: URLリストを受け取り、各URLのスクリーンショットを撮るメイン関数です。- Chromeオプションの設定: ヘッドレスモードでChromeを起動します。
- URLリストの読み込み:
url_list.txt
からURLを読み込みます。 - スクリーンショットの保存: 各URLのスクリーンショットを保存します。
実行方法
- 上記のスクリプトをPythonファイル(例:
capture_screenshots.py
)として保存します。 url_list.txt
というテキストファイルを作成し、各行に1つのURLを記入します。- コマンドラインからスクリプトを実行します。
python capture_screenshot_comad.py
このスクリプトは、指定されたURLリストの各URLに対してフルスクリーンショットを保存します。
スクリーンショットは"screenshot_0001.png"
、"screenshot_0002.png"
のように保存されます。