From 275ba6718a634fa7355012bda58dc3f721449c63 Mon Sep 17 00:00:00 2001 From: mfrank Date: Sat, 18 Jan 2025 21:36:40 +0100 Subject: [PATCH] Initial Version --- main.py | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++ users.json | 7 ++++ 2 files changed, 114 insertions(+) create mode 100644 main.py create mode 100644 users.json diff --git a/main.py b/main.py new file mode 100644 index 0000000..5fdb491 --- /dev/null +++ b/main.py @@ -0,0 +1,107 @@ +from selenium import webdriver +from selenium.webdriver.common.by import By +from datetime import datetime, timedelta +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from selenium.webdriver.support.wait import WebDriverWait +from selenium.webdriver.firefox.options import Options +import smtplib +import time +from dotenv import load_dotenv +import os +import json + + +# Load environment variables from .env file +load_dotenv() + +# Email Configuration from environment variables +SMTP_SERVER = os.getenv("SMTP_SERVER") +SMTP_PORT = int(os.getenv("SMTP_PORT")) +EMAIL_ADDRESS = os.getenv("EMAIL_ADDRESS") +EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD") + +DAYS_BEFORE = int(os.getenv("DAYS_BEFORE")) + +def check_date(due_date, recipient_email): + today = datetime.now() + if today <= due_date <= today + timedelta(days=DAYS_BEFORE): + print(f"Reminder: Book is due on {due_date}") + + # Send an email reminder + subject = "Stadtbibliothek Radebeul - Buch bald fällig" + body = f"Ein Buch muss am {due_date.strftime('%d.%m.%Y')} zurückgegeben werden. Bitte zurückgeben um Gebühren zu vermeiden." + + # Set up email + msg = MIMEMultipart() + msg['From'] = EMAIL_ADDRESS + msg['To'] = recipient_email + msg['Subject'] = subject + msg.attach(MIMEText(body, 'plain')) + + # Connect to SMTP server and send email + with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: + server.starttls() # Secure the connection + server.login(EMAIL_ADDRESS, EMAIL_PASSWORD) + server.send_message(msg) + print(f"Email sent to {recipient_email}") + +def check_books(user, pw, recipient_email): + options = Options() + options.add_argument("--headless") + driver = webdriver.Firefox(options=options) + try: + # Navigate to the login page + driver.get("https://webserver.sv-radebeul.de/Mediensuche-Konto/Mein-Konto") + + # Wait for the page to load + wait = WebDriverWait(driver, 10) + + # Locate username and password fields + username_field = driver.find_element(By.ID, "dnn_ctr355_Login_Login_COP_txtUsername") + password_field = driver.find_element(By.ID, "dnn_ctr355_Login_Login_COP_txtPassword") + + # Enter login credentials + username_field.send_keys(user) + password_field.send_keys(pw) + + # Click login button + login_button = driver.find_element(By.ID, "dnn_ctr355_Login_Login_COP_cmdLogin") + login_button.click() + + # Wait for login to complete + time.sleep(5) + + # Check if login was successful + if "Mein Konto" in driver.page_source: + print(f"Login successful for {user}!") + # Locate the table containing the rows + table = driver.find_element(By.ID, "dnn_ctr423_MainView_tpnlLoans_ucLoansView_grdViewLoans") + table_rows = table.find_elements(By.XPATH, "./tbody/tr") + + # Loop through each row and extract the "Aktuelle Frist" date + for row in table_rows: + try: + # Locate the "Aktuelle Frist" column in the current row + due_date = row.find_element(By.XPATH, ".//td[span[contains(text(), 'Aktuelle Frist:')]]/span[2]") + print(f"Aktuelle Frist for {user}: {due_date.text}") + check_date(datetime.strptime(due_date.text, "%d.%m.%Y"), recipient_email) + except Exception as e: + print(f"Could not extract 'Aktuelle Frist' date for a row: {e}") + else: + print(f"Login failed for {user}. Please check the credentials or the page structure.") + finally: + # Close the browser + driver.quit() + +if __name__ == '__main__': + # Load user credentials from JSON file + with open("users.json", "r") as file: + users = json.load(file) + + # Iterate over all users + for user_data in users: + username = user_data["username"] + password = user_data["password"] + recipient_email = user_data["recipient_email"] + check_books(username, password, recipient_email) diff --git a/users.json b/users.json new file mode 100644 index 0000000..fac8804 --- /dev/null +++ b/users.json @@ -0,0 +1,7 @@ +[ + { + "username": "USER", + "password": "PWD", + "recipient_email": "info@familie-frank.email" + } +]