Screenshots.py

This script generates screenshots for the presentation slides.

from playwright.sync_api import sync_playwright
from pathlib import Path

# ↪️ Define URLs and filenames
urls = [
    "https://github.com/maehr/open-research-data-template/",
    # "https://github.com/new?template_name=open-research-data-template&template_owner=maehr",
    # "https://codespaces.new/maehr/dh25-showcase",
    "https://dokumentation.stadtgeschichtebasel.ch/",
    "https://dokumentation.stadtgeschichtebasel.ch/sgb-figures/",
    "https://mtwente.github.io/maxvogt-analysis/docs/workflow.html",
    "https://mtwente.github.io/nordatlantisk-ft/report.html",
    "https://mtwente.github.io/modelling-marti/docs/work.html",
    "https://digihistch24.github.io/",
    "https://dhbern.github.io/",
    "https://dhbern.github.io/decoding-inequality-2025/",
    "https://maehr.github.io/diskriminierungsfreie-metadaten/",
    "https://maehr.github.io/one-template-to-rule-them-all/"
]
filenames = [
    "open_research_data_template.png",
    # "open_research_data_template_repo.png",
    # "open_research_data_template_codespace.png",
    "dokumentation_stadtgeschichtebasel_ch.png",
    "dokumentation_stadtgeschichtebasel_ch_sgb_figures.png",
    "maxvogt_analysis.png",
    "nordatlantisk_ft_report.png",
    "modelling_marti.png",
    "digihistch24.png",
    "dhbern.png",
    "decoding_inequality_2025.png",
    "diskriminierungsfreie_metadaten.png",
    "one_template_to_rule_them_all.png"
]

assert len(urls) == len(filenames), "URLs and filenames must match"

output_dir = Path("presentation/images/")
output_dir.mkdir(exist_ok=True)

# Use MacBook Pro's native resolution and scale factor 2 for Retina
viewport = {"width": 2940, "height": 1654}
scale = 2  # high-resolution (Retina)

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context(viewport=viewport, device_scale_factor=scale)
    for url, fname in zip(urls, filenames):
        page = context.new_page()
        page.goto(url, wait_until="networkidle")
        page.evaluate("document.body.style.zoom=2.0")

        # Example: Click a button
        # Replace 'button_selector' with the actual selector for the button
        # page.click('button_selector')
        
        # Example: Scroll down to a specific element
        # Replace 'element_selector' with the actual selector for the element
        # page.scroll_into_view('element_selector')
        
        # Example: Scroll down by a certain amount
        # page.evaluate("window.scrollBy(0, 1000)")  # Scroll down by 1000 pixels

        path = output_dir / fname
        page.screenshot(path=path)
        print(f"✅ Saved {path} for {url}")
    browser.close()

The script uses playwright to take screenshots in different formats. These are used in the presentation slides.

[project]
name = "one-template-to-rule-them-all"
version = "0.1.0"
description = "Interactive Research Data Documentation with Quarto - presentation materials for DHTech Symposium at DH2025"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
    "playwright>=1.53.0",
]

It can be run in a GitHub Codespace or locally with uv.

uv run presentation/screenshots.py
Back to top