CSVに書いたURLを順番に開いて全画面スクリーンショットを取るスクリプト


必要に迫られて、ちょこっと書いてみました。

環境

  • Windows10Pro
  • Python 3.7.2

モジュール

  • webdriver-manager 1.8.2
  • pytest 5.0.0

コード

こんな構成を想定してます。

.
├── data
│   └── urls.csv
├── utilities
│   └── read_csv.py
└── test_screenshot.py

メインの処理

csvのurl列に書いてあるURLを開いてはスクリーンショットを撮り、開いてはスクリーンショットを撮り、する処理です。

幅は1920px固定にしていますが、heightと同様にスクロールに対応させることも可能です。

test_screenshot.py
import time

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

from utilities.read_csv import read_csv_data


class TestScreenshot():

    datalist = read_csv_data("./data/urls.csv")

    @classmethod
    def setup_class(cls):
        options = Options()
        options.add_argument('--headless')
        options.add_argument('--hide-scrollbars')
        cls.driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=options)
        cls.driver.maximize_window()

    @pytest.mark.parametrize("id, url", datalist)
    def test_reserve_multi(self, id, url):
        driver = self.driver
        driver.get(url)
        time.sleep(3)
        page_height = driver.execute_script('return document.body.scrollHeight')
        driver.set_window_size(1920, page_height)
        driver.save_screenshot(id + '.png')

CSV

id列とurl列のふたつを持っています。idはスクリーンショットのファイル名にも使っています。

urls.csv
id,url
1,https://www.hoge.co.jp/
2,https://www.hoge.co.jp/pageA/
3,https://www.hoge.co.jp/pageB/
4,https://www.hoge.co.jp/pageC/
5,https://www.hoge.co.jp/pageD/

CSV読み込み処理

※Qiitaの記事から参考にした処理だったはずなのですが、参考元を探せず・・・

read_csv.py
import csv

def read_csv_data(csv_path):
    rows = []
    with open(str(csv_path), encoding="utf-8") as csv_data:
        content = csv.reader(csv_data)
        next(content, None)
        for row in content:
            rows.append(row)
        print(rows)
        return rows

使い方

> pytest test_screenshot.py

注意点

実際使ってみたのですが、JSとかを駆使して動きがあるようなサイトではうまく全画面で取得できませんでした。

たぶんこの方法に限らず、なかなか厳しいと思います。

参考