Files
anno-production-chain-renderer/utils/screenshot.py

61 lines
2.1 KiB
Python

import pathlib
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# URL = "http://localhost:9000/"
URL = "http://localhost:9000/#/expansions"
WAIT_TIME = 180
def main():
# define screenshot file
screenshot_file = (
(pathlib.Path(__file__).resolve().parents[0] / "base_production_chains").with_suffix(".png")
if "expansions" not in URL
else (pathlib.Path(__file__).resolve().parents[0] / "expansion_production_chains").with_suffix(".png")
)
# create chrome options
options = Options()
options.add_experimental_option("detach", True)
options.add_argument("--headless")
# create driver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.maximize_window()
# open quasar app locally
driver.get(url=URL)
# wait for page to load
WebDriverWait(driver=driver, timeout=10.0).until(
EC.presence_of_element_located((By.XPATH, "//main[contains(@class, 'q-page')]"))
)
print(f"Waiting {WAIT_TIME}s for page to load.")
time.sleep(WAIT_TIME)
# get page width and height
# https://stackoverflow.com/questions/41721734/take-screenshot-of-full-page-with-selenium-python-with-chromedriver/52572919#52572919
original_size = driver.get_window_size()
page_width = driver.execute_script("return document.body.parentNode.scrollWidth")
page_height = driver.execute_script("return document.body.parentNode.scrollHeight")
driver.set_window_size(width=page_width, height=page_height)
element = driver.find_element(by=By.XPATH, value="//main[contains(@class, 'q-page')]")
element.screenshot(str(screenshot_file))
print(f"saved screenshot to {screenshot_file}")
driver.quit()
if __name__ == "__main__":
main()