"""用户主页功能"""
from playwright.async_api import Page
from loguru import logger
from xiaohongshu.types import UserProfileResponse
class UserProfileAction:
"""用户主页操作"""
def __init__(self, page: Page):
self.page = page
async def user_profile(
self,
user_id: str,
xsec_token: str
) -> UserProfileResponse:
"""获取用户主页信息"""
logger.info(f"Getting user profile: {user_id}")
try:
# 导航到用户主页
url = f"https://www.xiaohongshu.com/user/profile/{user_id}?xsec_token={xsec_token}"
await self.page.goto(url)
await self.page.wait_for_load_state("networkidle")
# 获取用户数据
profile_data = await self.page.evaluate("""
() => {
const state = window.__INITIAL_STATE__;
if (state && state.user) {
return {
userBasicInfo: state.user.userPageData._rawValue.basicInfo,
interactions: state.user.userPageData._rawValue.interactions,
feeds: state.user.feeds._value || []
};
}
return null;
}
""")
if not profile_data:
raise Exception("Failed to get user profile data")
profile = UserProfileResponse.model_validate(profile_data)
logger.info(f"Got user profile with {len(profile.feeds)} feeds")
return profile
except Exception as e:
logger.error(f"Failed to get user profile: {e}")
raise