Angiin

fix: 昵称读取改用个人主页 .user-name,修复导航栏返回固定文字'我'的问题

@@ -28,6 +28,8 @@ from .selectors import ( @@ -28,6 +28,8 @@ from .selectors import (
28 PHONE_INPUT, 28 PHONE_INPUT,
29 PHONE_LOGIN_SUBMIT, 29 PHONE_LOGIN_SUBMIT,
30 QRCODE_IMG, 30 QRCODE_IMG,
  31 + USER_NICKNAME,
  32 + USER_PROFILE_NAV_LINK,
31 ) 33 )
32 from .urls import EXPLORE_URL 34 from .urls import EXPLORE_URL
33 35
@@ -48,15 +50,32 @@ def _wait_for_auth_ui(page: Page, timeout: float = 8.0) -> None: @@ -48,15 +50,32 @@ def _wait_for_auth_ui(page: Page, timeout: float = 8.0) -> None:
48 50
49 51
50 def get_current_user_nickname(page: Page) -> str: 52 def get_current_user_nickname(page: Page) -> str:
51 - """获取当前登录用户的昵称,失败时返回空字符串(best-effort)。""" 53 + """获取当前登录用户的真实昵称,失败时返回空字符串(best-effort)。
  54 +
  55 + 流程:首页导航栏取个人主页 href → 导航过去 → 读 .user-name 文字。
  56 + """
52 try: 57 try:
53 page.navigate(EXPLORE_URL) 58 page.navigate(EXPLORE_URL)
54 page.wait_for_load() 59 page.wait_for_load()
55 _wait_for_auth_ui(page) 60 _wait_for_auth_ui(page)
56 if not page.has_element(LOGIN_STATUS): 61 if not page.has_element(LOGIN_STATUS):
57 return "" 62 return ""
  63 +
  64 + # 从导航栏"我"的链接取个人主页 URL(含 /user/profile/<user_id>)
  65 + profile_href = page.evaluate(
  66 + f"document.querySelector({json.dumps(USER_PROFILE_NAV_LINK)})?.getAttribute('href') || ''"
  67 + )
  68 + if not profile_href:
  69 + return ""
  70 +
  71 + # 导航到个人主页读取真实昵称
  72 + profile_url = f"https://www.xiaohongshu.com{profile_href}"
  73 + page.navigate(profile_url)
  74 + page.wait_for_load()
  75 + page.wait_dom_stable()
  76 +
58 nickname = page.evaluate( 77 nickname = page.evaluate(
59 - f"document.querySelector({json.dumps(LOGIN_STATUS)})?.innerText?.trim() || ''" 78 + f"document.querySelector({json.dumps(USER_NICKNAME)})?.innerText?.trim() || ''"
60 ) 79 )
61 return nickname or "" 80 return nickname or ""
62 except Exception: 81 except Exception:
@@ -91,3 +91,7 @@ LOGOUT_MENU_ITEM = 'div.menu-item[data-name="退出登录"]' @@ -91,3 +91,7 @@ LOGOUT_MENU_ITEM = 'div.menu-item[data-name="退出登录"]'
91 91
92 # ========== 用户主页 ========== 92 # ========== 用户主页 ==========
93 SIDEBAR_PROFILE = "div.main-container li.user.side-bar-component a.link-wrapper span.channel" 93 SIDEBAR_PROFILE = "div.main-container li.user.side-bar-component a.link-wrapper span.channel"
  94 +# 登录后导航栏"我"的链接(href 含 /user/profile/<user_id>)
  95 +USER_PROFILE_NAV_LINK = ".main-container .user .link-wrapper a.link-wrapper"
  96 +# 个人主页真实昵称
  97 +USER_NICKNAME = ".user-name"