diff --git a/debug_screenshot.py b/debug_screenshot.py index 9ad550ac..c8c7aca5 100644 --- a/debug_screenshot.py +++ b/debug_screenshot.py @@ -34,38 +34,30 @@ async def main(): try: 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 + await asyncio.sleep(3) - # --- 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('ha-form > mwc-button') - - 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.") + # Warten, bis das Login-Formular bereit ist + username_input_selector = 'input[name="username"]' + await page.waitForSelector(username_input_selector, {'timeout': 10000}) - # 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("Login-Formular erkannt. Fülle Anmeldedaten aus...") + await page.type(username_input_selector, HA_USERNAME) + await page.type('input[name="password"]', HA_PASSWORD) + + # --- FINALE, ROBUSTE KLICK-METHODE VIA JAVASCRIPT --- + # Dieses Skript dringt in den Shadow DOM ein, um den Button zu finden und zu klicken. + logging.info("Klicke auf 'LOG IN'-Button via JavaScript (für Shadow DOM)...") + await page.evaluate('''() => { + document.querySelector('ha-auth-flow').shadowRoot.querySelector('ha-form > mwc-button').click(); + }''') + + logging.info("Warte nach Login auf Navigation/Neuladen...") + # Wir warten darauf, dass die Login-Maske verschwindet. + # Ein guter Indikator ist, wenn das 'ha-auth-flow'-Element nicht mehr da ist. + await page.waitForSelector('ha-auth-flow', {'hidden': True, 'timeout': 20000}) + + logging.info("Login erfolgreich, Seite wird neu geladen. Warte auf finale Ansicht...") + await asyncio.sleep(10) # Finale Wartezeit für das Dashboard-Rendering logging.info("Erstelle finalen Screenshot...") await page.screenshot({'path': OUTPUT_FILE}) @@ -78,10 +70,4 @@ async def main(): finally: logging.info("Schließe Browser.") - await browser.close() - -if __name__ == '__main__': - try: - asyncio.run(main()) - except Exception as e: - logging.critical(f"Kritischer Fehler im Hauptprozess: {e}", exc_info=True) \ No newline at end of file + await browser.close() \ No newline at end of file