debug_screenshot.py aktualisiert

This commit is contained in:
2025-07-05 20:00:51 +00:00
parent 541afd4059
commit 8d8abbc116

View File

@@ -1,72 +1,47 @@
import asyncio import asyncio
from pyppeteer import launch
import logging
import os import os
import logging
from pyppeteer import launch
# Logging-Konfiguration # Logging-Konfiguration
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# --- Konfiguration ---
HA_URL = "http://192.168.178.131:8123/lovelace/solar?kiosk" 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") HA_TOKEN = os.environ.get("HA_ACCESS_TOKEN")
async def main(): 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( browser = await launch(
executablePath='/usr/bin/chromium', executablePath='/usr/bin/chromium',
headless=True, 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() page = await browser.newPage()
await page.setViewport({'width': 1280, 'height': 1024}) await page.setViewport({'width': 1280, 'height': 1024})
try: logging.info("Setze Authentifizierungs-Header...")
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...")
await asyncio.sleep(10)
logging.info("Erstelle 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}")
logging.info("Speichere trotzdem einen Screenshot des aktuellen Zustands...")
await page.screenshot({'path': '/app/output/debug_error.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({ await page.setExtraHTTPHeaders({
'Authorization': f'Bearer {HA_TOKEN}' 'Authorization': f'Bearer {HA_TOKEN}'
}) })
else:
logging.warning("Kein HA_ACCESS_TOKEN gefunden. Versuche unauthentifizierten Zugriff.")
try: try:
logging.info(f"Navigiere zu URL: {HA_URL}") logging.info(f"Navigiere zu URL: {HA_URL}")
await page.goto(HA_URL, {'waitUntil': 'networkidle0', 'timeout': 60000}) 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) await asyncio.sleep(10)
logging.info("Erstelle Screenshot...") logging.info("Erstelle Screenshot...")
@@ -74,10 +49,17 @@ async def main():
logging.info(f"Screenshot erfolgreich unter {OUTPUT_FILE} gespeichert.") logging.info(f"Screenshot erfolgreich unter {OUTPUT_FILE} gespeichert.")
except Exception as e: except Exception as e:
logging.error(f"Ein Fehler ist aufgetreten: {e}") logging.error(f"Ein Fehler ist aufgetreten: {e}", exc_info=True)
logging.info("Speichere trotzdem einen Screenshot des aktuellen Zustands...") logging.info("Speichere trotzdem einen Screenshot des Fehler-Zustands...")
await page.screenshot({'path': '/screenshots/debug_error.png'}) await page.screenshot({'path': '/screenshots/debug_error_final.png'})
finally: finally:
logging.info("Schließe Browser.") logging.info("Schließe Browser.")
await browser.close() 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:
logging.critical(f"Kritischer Fehler im Hauptprozess: {e}", exc_info=True)