diff --git a/debug_screenshot.py b/debug_screenshot.py index f8b9cee3..b2e47faf 100644 --- a/debug_screenshot.py +++ b/debug_screenshot.py @@ -1,32 +1,47 @@ import asyncio -from pyppeteer import launch -import logging import os +import logging +from pyppeteer import launch # Logging-Konfiguration logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +# --- Konfiguration --- HA_URL = "http://192.168.178.131:8123/lovelace/solar?kiosk" -OUTPUT_FILE = "/screenshots/debug_screenshot.png" +OUTPUT_FILE = "/screenshots/debug_screenshot_final.png" HA_TOKEN = os.environ.get("HA_ACCESS_TOKEN") async def main(): - logging.info("Starte Puppeteer-Browser...") + if not HA_TOKEN: + logging.error("Fehler: Umgebungsvariable HA_ACCESS_TOKEN nicht gefunden!") + return + + logging.info("Starte Puppeteer-Browser mit Ignorieren von HTTPS-Fehlern...") browser = await launch( executablePath='/usr/bin/chromium', headless=True, - args=['--no-sandbox', '--disable-setuid-sandbox'] + # === ENTSCHEIDENDE ÄNDERUNG: SSL-Fehler ignorieren === + ignoreHTTPSErrors=True, + 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}") - # Wir erhöhen den Timeout auf 60 Sekunden await page.goto(HA_URL, {'waitUntil': 'networkidle0', 'timeout': 60000}) - logging.info("Seite geladen. Warte 10 Sekunden, um Rendering abzuwarten...") + logging.info("Seite geladen. Warte 10 Sekunden auf das finale Rendering...") await asyncio.sleep(10) logging.info("Erstelle Screenshot...") @@ -34,50 +49,17 @@ async def main(): logging.info(f"Screenshot erfolgreich unter {OUTPUT_FILE} gespeichert.") except Exception as e: - logging.error(f"Ein Fehler ist aufgetreten: {e}") - logging.info("Speichere trotzdem einen Screenshot des aktuellen Zustands...") - await page.screenshot({'path': '/app/output/debug_error.png'}) + logging.error(f"Ein Fehler ist aufgetreten: {e}", exc_info=True) + logging.info("Speichere trotzdem einen Screenshot des Fehler-Zustands...") + await page.screenshot({'path': '/screenshots/debug_error_final.png'}) finally: logging.info("Schließe Browser.") await browser.close() -async def main(): - logging.info("Starte Puppeteer-Browser...") - browser = await launch( - executablePath='/usr/bin/chromium', - headless=True, - args=['--no-sandbox', '--disable-setuid-sandbox'] - ) - - page = await browser.newPage() - await page.setViewport({'width': 1280, 'height': 1024}) - - # NEU: Authentifizierungs-Header für alle Anfragen dieser Seite setzen - if HA_TOKEN: - logging.info("Authentifizierungs-Token gefunden. Setze 'Authorization'-Header.") - await page.setExtraHTTPHeaders({ - 'Authorization': f'Bearer {HA_TOKEN}' - }) - else: - logging.warning("Kein HA_ACCESS_TOKEN gefunden. Versuche unauthentifizierten Zugriff.") - +if __name__ == '__main__': + # Stellt sicher, dass das Skript auch bei Fehlern nicht sofort abbricht try: - logging.info(f"Navigiere zu URL: {HA_URL}") - await page.goto(HA_URL, {'waitUntil': 'networkidle0', 'timeout': 60000}) - - logging.info("Seite geladen. Warte 10 Sekunden, um Rendering abzuwarten...") - await asyncio.sleep(10) - - logging.info("Erstelle Screenshot...") - await page.screenshot({'path': OUTPUT_FILE}) - logging.info(f"Screenshot erfolgreich unter {OUTPUT_FILE} gespeichert.") - + asyncio.run(main()) except Exception as e: - logging.error(f"Ein Fehler ist aufgetreten: {e}") - logging.info("Speichere trotzdem einen Screenshot des aktuellen Zustands...") - await page.screenshot({'path': '/screenshots/debug_error.png'}) - - finally: - logging.info("Schließe Browser.") - await browser.close() \ No newline at end of file + logging.critical(f"Kritischer Fehler im Hauptprozess: {e}", exc_info=True) \ No newline at end of file