From 2c948914ea84cb5148f524fa633c50776f52ef95 Mon Sep 17 00:00:00 2001 From: Oliver Hofmann Date: Sun, 17 May 2026 12:03:05 +0200 Subject: [PATCH] fix: load Teams main before meeting URL to resolve username --- main.py | 15 +++++++++------ src/teampulse/monitor.py | 31 ++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/main.py b/main.py index 457d0d2..951001a 100644 --- a/main.py +++ b/main.py @@ -69,12 +69,8 @@ def main(): page = context.new_page() - if meeting_url: - page.goto(meeting_url) - else: - page.goto(TEAMS_URL) - print("\nKeine Meeting-URL gefunden — bitte im Browser zur Chat-Seite navigieren.") - print("Tipp: Meeting-Link aus Teams kopieren, dann Skript neu starten.\n") + # Always load Teams main first so user-name selectors are available + page.goto(TEAMS_URL) monitor = Monitor(page=page, current_user="") print("Lese eingeloggten Nutzer...") @@ -82,6 +78,13 @@ def main(): monitor._current_user = current_user print(f"Eingeloggt als: {current_user}") + if meeting_url: + print(f"\nNavigiere zur Meeting-Chat-Seite...") + page.goto(meeting_url) + else: + print("\nKeine Meeting-URL gefunden — bitte im Browser zur Chat-Seite navigieren.") + print("Tipp: Meeting-Link aus Teams kopieren, dann Skript neu starten.\n") + print("\nPoste '!start \"Name des Vortragenden\"' im Chat um zu beginnen.\n") window = monitor.run() diff --git a/src/teampulse/monitor.py b/src/teampulse/monitor.py index 2dc49c5..952041d 100644 --- a/src/teampulse/monitor.py +++ b/src/teampulse/monitor.py @@ -46,13 +46,30 @@ class Monitor: print("Chat erkannt.") def get_current_user_display_name(self) -> str: - el = self._page.query_selector("[data-tid='me-control-display-name']") - if el: - return el.inner_text().strip() - el = self._page.query_selector("[aria-label*='Profilbild']") - if el: - return (el.get_attribute("aria-label") or "").replace("Profilbild", "").strip() - raise RuntimeError("Konnte den Namen des eingeloggten Nutzers nicht ermitteln.") + # Wait for the Teams main UI to render (not a lobby/join page) + try: + self._page.wait_for_selector( + "[data-tid='me-control-display-name'], [aria-label*='Profilbild'], [aria-label*='Profile picture']", + timeout=15_000, + ) + except Exception: + pass + + for selector, transform in [ + ("[data-tid='me-control-display-name']", lambda el: el.inner_text().strip()), + ("[aria-label*='Profilbild']", lambda el: (el.get_attribute("aria-label") or "").replace("Profilbild", "").strip()), + ("[aria-label*='Profile picture']", lambda el: (el.get_attribute("aria-label") or "").replace("Profile picture", "").strip()), + ]: + el = self._page.query_selector(selector) + if el: + name = transform(el) + if name: + return name + + name = input("Benutzername nicht erkannt. Bitte deinen Teams-Anzeigenamen eingeben: ").strip() + if not name: + raise RuntimeError("Kein Benutzername angegeben.") + return name def poll_new_messages(self) -> list[ChatMessage]: elements = self._page.query_selector_all(_MSG_SELECTOR)