fix: load Teams main before meeting URL to resolve username

This commit is contained in:
Oliver Hofmann 2026-05-17 12:03:05 +02:00
parent 01785d6ddc
commit 2c948914ea
2 changed files with 33 additions and 13 deletions

15
main.py
View File

@ -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()

View File

@ -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)