#!/usr/bin/env python3 import os import sys from playwright.sync_api import sync_playwright def fail(msg): print(f"FAILED! {msg}") sys.exit(1) if len(sys.argv) != 3: fail("Usage: ") url = sys.argv[1] outfile = sys.argv[2] # eScribe doesn't use consistent cases between municipalities. # I don't know, maybe python doesn't care? I don't know python lol, this entire thing was blogs and stack overflow glued together. url_lowercase = url.lower() try: with sync_playwright() as p: # Firefox headless is okay I guess. I tried chrome but 403. browser = p.firefox.launch( headless=True ) context = browser.new_context( accept_downloads=True ) page = context.new_page() # The PDFs if "filestream.ashx" in url_lowercase: page.set_content( f'Too bad eScribe, your files are mine. Click here!' ) with page.expect_download( timeout=60000 ) as d: page.locator("#download").click() download = d.value os.makedirs( os.path.dirname(outfile) or ".", exist_ok=True ) download.save_as(outfile) browser.close() sys.exit(0) # The HTMLs if "meeting.aspx" in url_lowercase: response = page.goto( url, timeout=50000 ) if response is None: fail("No response") body = response.body() os.makedirs( os.path.dirname(outfile) or ".", exist_ok=True ) with open(outfile, "wb") as fp: fp.write(body) browser.close() sys.exit(0) browser.close() # Not filestream or meeting. I do not know what this could be. fail( f"New or unsupported eScribe URL: {url}" ) except Exception as e: fail( f"{type(e).__name__}: {e}" )