bump devcontainer to bookworm, add documentation
This commit is contained in:
		| @@ -1,29 +1,32 @@ | ||||
| import sys | ||||
| import time | ||||
|  | ||||
| from PIL import Image | ||||
| from PIL import ImageEnhance | ||||
| from selenium import webdriver | ||||
| from selenium.common.exceptions import ElementClickInterceptedException, TimeoutException, NoSuchElementException | ||||
| from selenium.common.exceptions import ElementClickInterceptedException | ||||
| from selenium.common.exceptions import NoSuchElementException | ||||
| from selenium.common.exceptions import TimeoutException | ||||
| from selenium.webdriver.chrome.options import Options | ||||
| from selenium.webdriver.chrome.service import Service | ||||
| from selenium.webdriver.common.by import By | ||||
| from selenium.webdriver.support.wait import WebDriverWait | ||||
|  | ||||
| import sys | ||||
| import time | ||||
|  | ||||
| def get_scraped_weatherforecast_image() -> Image: | ||||
|     # Set the desired viewport size (width, height) | ||||
|     my_width = 480 | ||||
|     my_height = 850 | ||||
|     mobile_emulation = { | ||||
|         "deviceMetrics": { "width": my_width, "height": my_height, "pixelRatio": 1.0 }, | ||||
|         "userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19" | ||||
|         "deviceMetrics": {"width": my_width, "height": my_height, "pixelRatio": 1.0}, | ||||
|         "userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19", | ||||
|     } | ||||
|  | ||||
|     # Create an instance of the webdriver with some pre-configured options | ||||
|     options = Options() | ||||
|     options.add_argument("--no-sandbox") | ||||
|     options.add_argument("--headless=new") | ||||
|     #options.add_argument("--disable-gpu") | ||||
|     # options.add_argument("--disable-gpu") | ||||
|     options.add_argument("--disable-dev-shm-usage") | ||||
|     options.add_experimental_option("mobileEmulation", mobile_emulation) | ||||
|     service = Service("/usr/bin/chromedriver") | ||||
| @@ -38,7 +41,7 @@ def get_scraped_weatherforecast_image() -> Image: | ||||
|     driver.execute_script("return arguments[0].scrollIntoView();", login_button) | ||||
|     # Click the button | ||||
|     button_clicked = False | ||||
|     while(button_clicked == False): | ||||
|     while button_clicked == False: | ||||
|         try: | ||||
|             login_button.click() | ||||
|             button_clicked = True | ||||
| @@ -49,9 +52,12 @@ def get_scraped_weatherforecast_image() -> Image: | ||||
|  | ||||
|     # hacky wait statement for all the page elements to load | ||||
|     page_loaded = False | ||||
|     while(page_loaded == False): | ||||
|     while page_loaded == False: | ||||
|         try: | ||||
|             WebDriverWait(driver, timeout=45).until(lambda d: d.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[1]/div[1]/div[1]/h2').text != "") | ||||
|             WebDriverWait(driver, timeout=45).until( | ||||
|                 lambda d: d.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[1]/div[1]/div[1]/h2').text | ||||
|                 != "" | ||||
|             ) | ||||
|             page_loaded = True | ||||
|         except TimeoutException: | ||||
|             print("Couldn't get the page to load, retrying...") | ||||
| @@ -66,11 +72,11 @@ def get_scraped_weatherforecast_image() -> Image: | ||||
|     driver.execute_script("arguments[0].remove();", map_element) | ||||
|  | ||||
|     # remove the hourly forecast | ||||
|     #map_element = driver.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[2]/div[1]') | ||||
|     #driver.execute_script("arguments[0].remove();", map_element) | ||||
|     # map_element = driver.find_element(By.XPATH, '//*[@id="weather-widget"]/div[2]/div[2]/div[1]') | ||||
|     # driver.execute_script("arguments[0].remove();", map_element) | ||||
|  | ||||
|     # zoom in a little - not now | ||||
|     driver.execute_script("document.body.style.zoom='110%'"); | ||||
|     driver.execute_script("document.body.style.zoom='110%'") | ||||
|  | ||||
|     html_element = driver.find_element(By.TAG_NAME, "html") | ||||
|     driver.execute_script("arguments[0].style.fontSize = '16px';", html_element) | ||||
| @@ -83,18 +89,20 @@ def get_scraped_weatherforecast_image() -> Image: | ||||
|     driver.quit() | ||||
|  | ||||
|     # crop, resize, enhance & rotate the image for inky display | ||||
|     im = Image.open(image_filename, mode='r', formats=None) | ||||
|     im = im.crop((0, 100, (my_width-50), (my_height-50))) | ||||
|     im = Image.open(image_filename, mode="r", formats=None) | ||||
|     im = im.crop((0, 100, (my_width - 50), (my_height - 50))) | ||||
|     im = im.resize((480, 800), resample=Image.LANCZOS) | ||||
|     #im = im.rotate(90, Image.NEAREST, expand = 1) | ||||
|     # im = im.rotate(90, Image.NEAREST, expand = 1) | ||||
|     im = ImageEnhance.Contrast(im).enhance(1.0) | ||||
|     im.save(image_filename) | ||||
|     return im, im | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     _, _ = get_scraped_weatherforecast_image() | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     now = time.asctime() | ||||
|     print(f"It's {now} - running {__name__} in standalone/debug mode") | ||||
|     main() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 mrbwburns
					mrbwburns