debug_screenshot.py aktualisiert
This commit is contained in:
@@ -34,38 +34,30 @@ async def main():
|
|||||||
try:
|
try:
|
||||||
logging.info(f"Navigiere zur initialen URL: {HA_URL}")
|
logging.info(f"Navigiere zur initialen URL: {HA_URL}")
|
||||||
await page.goto(HA_URL, {'waitUntil': 'networkidle0', 'timeout': 60000})
|
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 ---
|
# Warten, bis das Login-Formular bereit ist
|
||||||
# Prüfen, ob wir auf der Login-Seite sind, indem wir nach dem "Username"-Feld suchen
|
username_input_selector = 'input[name="username"]'
|
||||||
try:
|
await page.waitForSelector(username_input_selector, {'timeout': 10000})
|
||||||
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...")
|
logging.info("Login-Formular erkannt. Fülle Anmeldedaten aus...")
|
||||||
await page.type(username_input_selector, HA_USERNAME)
|
await page.type(username_input_selector, HA_USERNAME)
|
||||||
await page.type('input[name="password"]', HA_PASSWORD)
|
await page.type('input[name="password"]', HA_PASSWORD)
|
||||||
|
|
||||||
logging.info("Klicke auf 'LOG IN'-Button...")
|
# --- FINALE, ROBUSTE KLICK-METHODE VIA JAVASCRIPT ---
|
||||||
await page.click('ha-form > mwc-button')
|
# 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...")
|
logging.info("Warte nach Login auf Navigation/Neuladen...")
|
||||||
# Wir warten, bis ein bekanntes Element des Dashboards erscheint.
|
# Wir warten darauf, dass die Login-Maske verschwindet.
|
||||||
# Ein guter Kandidat ist der "overview"-Tab oder ein spezifisches Element Ihrer Solar-Ansicht.
|
# Ein guter Indikator ist, wenn das 'ha-auth-flow'-Element nicht mehr da ist.
|
||||||
# Wir verwenden einen allgemeinen, der wahrscheinlich da ist:
|
await page.waitForSelector('ha-auth-flow', {'hidden': True, 'timeout': 20000})
|
||||||
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 erfolgreich, Seite wird neu geladen. Warte auf finale Ansicht...")
|
||||||
logging.info("Login-Formular nicht gefunden. Gehe davon aus, dass wir bereits eingeloggt sind.")
|
await asyncio.sleep(10) # Finale Wartezeit für das Dashboard-Rendering
|
||||||
|
|
||||||
# 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...")
|
logging.info("Erstelle finalen Screenshot...")
|
||||||
await page.screenshot({'path': OUTPUT_FILE})
|
await page.screenshot({'path': OUTPUT_FILE})
|
||||||
@@ -79,9 +71,3 @@ async def main():
|
|||||||
finally:
|
finally:
|
||||||
logging.info("Schließe Browser.")
|
logging.info("Schließe Browser.")
|
||||||
await browser.close()
|
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)
|
|
||||||
Reference in New Issue
Block a user