Un script qui ouvre les URL écrites en CSV dans l'ordre et prend une capture d'écran en plein écran

J'ai écrit un peu parce que j'en avais besoin.

environnement

module

code

Je suppose ce genre de configuration.

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

Traitement principal

C'est un processus pour ouvrir l'URL écrite dans la colonne url de csv et prendre une capture d'écran, et l'ouvrir pour prendre une capture d'écran.

La largeur est fixée à 1920px, mais il est possible de prendre en charge le défilement ainsi que la hauteur.

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

Il a deux colonnes, la colonne ʻid et la colonne ʻurl. ʻId` est également utilisé dans le nom du fichier de capture d'écran.

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/

Processus de lecture CSV

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

Comment utiliser

> pytest test_screenshot.py

point important

J'ai en fait essayé de l'utiliser, mais je ne pouvais pas l'obtenir en plein écran sur un site qui bougeait en utilisant pleinement JS.

Probablement pas limité à cette méthode, je pense que c'est assez strict.

référence

Recommended Posts

Un script qui ouvre les URL écrites en CSV dans l'ordre et prend une capture d'écran en plein écran
Script Python qui lit les fichiers SQL, exécute BigQuery et enregistre le csv
Traitez les fichiers du dossier dans l'ordre avec le script shell
J'ai écrit un script qui divise l'image en deux
Traitez le contenu du fichier dans l'ordre avec un script shell
Celui qui divise le fichier csv, le lit et le traite en parallèle
[Note] Sur la base de la latitude et de la longitude du fichier CSV, nous avons créé un script qui extrait les données dans la plage cible et ajoute un code de maillage.
Exécuter l'interpréteur Python dans le script
Définir la valeur de division dans Django et la refléter facilement à l'écran
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Une solution au problème que les fichiers contenant [et] ne sont pas répertoriés dans glob.glob ()