スクリプトでホームページのスクリーンショットを取る方法

小ネタです。 skiapp でホームページの画像をスクリーンショット保存(キャプチャ)して配信しているが、200サイトぐらいだから手動でも良いかなと思い始めて5サイト目ぐらいで「こりゃめんどい」と思い、スクリプトを書いたのでその記録。

方法

from selenium import webdriver
import chromedriver_binary
from PIL import Image
import time

def capture(filename, url):
    save_path = "image/" + filename + ".png"
    driver = webdriver.Chrome()
    driver.get(url)
    time.sleep(3)

    w = driver.execute_script("return document.body.scrollWidth;")
    h = driver.execute_script("return document.body.scrollHeight;")

    driver.set_window_size(w, h)
    driver.save_screenshot(save_path)

    driver.quit()

    img = Image.open(save_path)
    resized_img = img.resize((500, round(img.height * 500 / img.width)), resample=Image.LANCZOS)
    resized_img.save("image_resized/" + filename + ".png")

与えられたurlに対してHPにアクセスして画面キャプチャ、 image フォルダに画像を image_resize フォルダに横幅500pxにリサイズしたものを保存。

完全に小ネタでした。