fix: add aria-label hover strategy; log which strategy triggered
This commit is contained in:
parent
af9a42f7eb
commit
24f8537d89
@ -45,51 +45,62 @@ class Resolver:
|
|||||||
encoding="utf-8",
|
encoding="utf-8",
|
||||||
)
|
)
|
||||||
|
|
||||||
def _hover_sender(self, display_name: str) -> bool:
|
def _hover_sender(self, display_name: str) -> str:
|
||||||
"""Find the sender's avatar in the visible chat and hover to open the profile card."""
|
"""Find the sender's avatar/name and hover to open the profile card.
|
||||||
|
Returns the strategy used, or '' if not found."""
|
||||||
|
|
||||||
# Strategy 1: reply-message-header (channel meetings) — hover the avatar
|
# Strategy 1: reply-message-header (channel meetings) — avatar next to name
|
||||||
for header in self._page.query_selector_all("[data-tid='reply-message-header']"):
|
for header in self._page.query_selector_all("[data-tid='reply-message-header']"):
|
||||||
try:
|
try:
|
||||||
# Quick check on full header text before iterating spans
|
|
||||||
if display_name not in header.inner_text():
|
if display_name not in header.inner_text():
|
||||||
continue
|
continue
|
||||||
avatar = header.query_selector("[data-tid='reply-message-header-avatar']")
|
avatar = header.query_selector("[data-tid='reply-message-header-avatar']")
|
||||||
if avatar:
|
if avatar:
|
||||||
avatar.scroll_into_view_if_needed()
|
avatar.scroll_into_view_if_needed()
|
||||||
avatar.hover()
|
avatar.hover()
|
||||||
return True
|
return "reply-avatar"
|
||||||
# Fallback: hover the name span
|
|
||||||
for span in header.query_selector_all("span"):
|
for span in header.query_selector_all("span"):
|
||||||
if span.inner_text().strip() == display_name:
|
if span.inner_text().strip() == display_name:
|
||||||
span.scroll_into_view_if_needed()
|
span.scroll_into_view_if_needed()
|
||||||
span.hover()
|
span.hover()
|
||||||
return True
|
return "reply-span"
|
||||||
except Exception:
|
except Exception:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Strategy 2: message-author-name (private meeting chat) — hover the element
|
# Strategy 2: aria-label containing the name (Fluent UI persona elements)
|
||||||
|
safe_name = display_name.replace("'", "\\'")
|
||||||
|
for el in self._page.query_selector_all(f"[aria-label*='{safe_name}']"):
|
||||||
|
try:
|
||||||
|
if el.is_visible():
|
||||||
|
el.scroll_into_view_if_needed()
|
||||||
|
el.hover()
|
||||||
|
return "aria-label"
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Strategy 3: message-author-name (private meeting chat)
|
||||||
for el in self._page.query_selector_all("[data-tid='message-author-name']"):
|
for el in self._page.query_selector_all("[data-tid='message-author-name']"):
|
||||||
try:
|
try:
|
||||||
if el.inner_text().strip() == display_name:
|
if el.inner_text().strip() == display_name:
|
||||||
el.scroll_into_view_if_needed()
|
el.scroll_into_view_if_needed()
|
||||||
el.hover()
|
el.hover()
|
||||||
return True
|
return "author-name"
|
||||||
except Exception:
|
except Exception:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
return False
|
return ""
|
||||||
|
|
||||||
def _extract_email_from_profile(self, display_name: str) -> str | None:
|
def _extract_email_from_profile(self, display_name: str) -> str | None:
|
||||||
try:
|
try:
|
||||||
hovered = self._hover_sender(display_name)
|
strategy = self._hover_sender(display_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f" Hover auf '{display_name}' fehlgeschlagen: {e}")
|
print(f" Hover auf '{display_name}' fehlgeschlagen: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if not hovered:
|
if not strategy:
|
||||||
print(f" '{display_name}' nicht im sichtbaren Chat gefunden.")
|
print(f" '{display_name}' nicht im sichtbaren Chat gefunden.")
|
||||||
return None
|
return None
|
||||||
|
print(f" '{display_name}' via '{strategy}' gehovered...")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Stage 1: wait for card container to appear
|
# Stage 1: wait for card container to appear
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user