debug_screenshot.py aktualisiert
This commit is contained in:
@@ -2,6 +2,7 @@ import asyncio
|
||||
import os
|
||||
import logging
|
||||
from pyppeteer import launch
|
||||
from pyppeteer.errors import TimeoutError
|
||||
|
||||
# Logging-Konfiguration
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||
@@ -9,48 +10,70 @@ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(
|
||||
# --- Konfiguration ---
|
||||
HA_URL = "http://192.168.178.131:8123/lovelace/solar?kiosk"
|
||||
OUTPUT_FILE = "/screenshots/debug_screenshot_final.png"
|
||||
HA_TOKEN = os.environ.get("HA_ACCESS_TOKEN")
|
||||
|
||||
# NEU: Anmeldedaten aus Umgebungsvariablen lesen
|
||||
HA_USERNAME = os.environ.get("HA_USERNAME")
|
||||
HA_PASSWORD = os.environ.get("HA_PASSWORD")
|
||||
|
||||
async def main():
|
||||
if not HA_TOKEN:
|
||||
logging.error("Fehler: Umgebungsvariable HA_ACCESS_TOKEN nicht gefunden!")
|
||||
if not HA_USERNAME or not HA_PASSWORD:
|
||||
logging.error("Fehler: HA_USERNAME oder HA_PASSWORD Umgebungsvariable nicht gefunden!")
|
||||
return
|
||||
|
||||
logging.info("Starte Puppeteer-Browser mit Ignorieren von HTTPS-Fehlern...")
|
||||
logging.info("Starte Puppeteer-Browser...")
|
||||
browser = await launch(
|
||||
executablePath='/usr/bin/chromium',
|
||||
headless=True,
|
||||
# === ENTSCHEIDENDE ÄNDERUNG: SSL-Fehler ignorieren ===
|
||||
ignoreHTTPSErrors=True,
|
||||
args=[
|
||||
'--no-sandbox',
|
||||
'--disable-setuid-sandbox',
|
||||
'--disable-dev-shm-usage'
|
||||
]
|
||||
args=['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage']
|
||||
)
|
||||
|
||||
page = await browser.newPage()
|
||||
await page.setViewport({'width': 1280, 'height': 1024})
|
||||
|
||||
logging.info("Setze Authentifizierungs-Header...")
|
||||
await page.setExtraHTTPHeaders({
|
||||
'Authorization': f'Bearer {HA_TOKEN}'
|
||||
})
|
||||
|
||||
try:
|
||||
logging.info(f"Navigiere zu URL: {HA_URL}")
|
||||
logging.info(f"Navigiere zur initialen URL: {HA_URL}")
|
||||
await page.goto(HA_URL, {'waitUntil': 'networkidle0', 'timeout': 60000})
|
||||
await asyncio.sleep(3) # Warten, bis die Seite stabil ist
|
||||
|
||||
# --- NEUE LOGIN-ROUTINE ---
|
||||
# Prüfen, ob wir auf der Login-Seite sind, indem wir nach dem "Username"-Feld suchen
|
||||
try:
|
||||
username_input_selector = 'input[name="username"]'
|
||||
logging.info(f"Suche nach Username-Feld mit Selektor: {username_input_selector}")
|
||||
await page.waitForSelector(username_input_selector, {'timeout': 5000}) # 5 Sekunden warten
|
||||
|
||||
logging.info("Login-Formular erkannt. Fülle Anmeldedaten aus...")
|
||||
await page.type(username_input_selector, HA_USERNAME)
|
||||
await page.type('input[name="password"]', HA_PASSWORD)
|
||||
|
||||
logging.info("Klicke auf 'LOG IN'-Button...")
|
||||
await page.click('button[type="submit"]')
|
||||
|
||||
logging.info("Warte nach Login auf Navigation/Neuladen...")
|
||||
# Wir warten, bis ein bekanntes Element des Dashboards erscheint.
|
||||
# Ein guter Kandidat ist der "overview"-Tab oder ein spezifisches Element Ihrer Solar-Ansicht.
|
||||
# Wir verwenden einen allgemeinen, der wahrscheinlich da ist:
|
||||
await page.waitForSelector('ha-tab[aria-label="Übersicht"]', {'timeout': 20000})
|
||||
logging.info("Login erfolgreich, Dashboard-Element gefunden.")
|
||||
await asyncio.sleep(5) # Extra Wartezeit für das Rendern des Dashboards
|
||||
|
||||
except TimeoutError:
|
||||
logging.info("Login-Formular nicht gefunden. Gehe davon aus, dass wir bereits eingeloggt sind.")
|
||||
|
||||
logging.info("Seite geladen. Warte 10 Sekunden auf das finale Rendering...")
|
||||
await asyncio.sleep(10)
|
||||
|
||||
logging.info("Erstelle Screenshot...")
|
||||
# Erneuter Navigationsversuch zur finalen URL, falls die Weiterleitung nicht geklappt hat
|
||||
if "solar" not in page.url:
|
||||
logging.info(f"Navigiere erneut zur finalen URL: {HA_URL}")
|
||||
await page.goto(HA_URL, {'waitUntil': 'networkidle0', 'timeout': 60000})
|
||||
await asyncio.sleep(10)
|
||||
|
||||
logging.info("Erstelle finalen Screenshot...")
|
||||
await page.screenshot({'path': OUTPUT_FILE})
|
||||
logging.info(f"Screenshot erfolgreich unter {OUTPUT_FILE} gespeichert.")
|
||||
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Ein Fehler ist aufgetreten: {e}", exc_info=True)
|
||||
logging.info("Speichere trotzdem einen Screenshot des Fehler-Zustands...")
|
||||
logging.info("Speichere Screenshot des Fehler-Zustands...")
|
||||
await page.screenshot({'path': '/screenshots/debug_error_final.png'})
|
||||
|
||||
finally:
|
||||
@@ -58,7 +81,6 @@ async def main():
|
||||
await browser.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Stellt sicher, dass das Skript auch bei Fehlern nicht sofort abbricht
|
||||
try:
|
||||
asyncio.run(main())
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user