#!/usr/bin/env python3
"""
调试服务级别的 Feed 列表问题
"""
import asyncio
from browser.browser import BrowserManager
from xiaohongshu.feeds import FeedsListAction
async def debug_service_feeds():
"""调试服务级别的 Feed 获取"""
print("="*60)
print("调试服务级别的 Feed 列表")
print("="*60)
# 使用与服务相同的配置:headless=True
browser = BrowserManager(headless=True)
await browser.start()
try:
page = await browser.new_page()
# 监听控制台消息
page.on("console", lambda msg: print(f"[Browser Console] {msg.type}: {msg.text}"))
print("\n1. 导航到探索页...")
await page.goto("https://www.xiaohongshu.com/explore", timeout=60000)
print(" ✓ 页面已加载")
print("\n2. 等待页面加载...")
await page.wait_for_load_state("load", timeout=60000)
print(" ✓ 基本加载完成")
print("\n3. 等待 JavaScript 执行...")
await asyncio.sleep(5)
print(" ✓ 等待完成")
print("\n4. 检查页面状态...")
result = await page.evaluate("""
() => {
const state = window.__INITIAL_STATE__;
return {
stateExists: !!state,
stateKeys: state ? Object.keys(state) : [],
feedExists: state ? !!state.feed : false,
feedKeys: (state && state.feed) ? Object.keys(state.feed) : [],
feedsExists: (state && state.feed) ? !!state.feed.feeds : false,
feedsKeys: (state && state.feed && state.feed.feeds) ? Object.keys(state.feed.feeds) : [],
valueExists: (state && state.feed && state.feed.feeds) ? !!state.feed.feeds._value : false,
valueLength: (state && state.feed && state.feed.feeds && state.feed.feeds._value) ? state.feed.feeds._value.length : 0
};
}
""")
print(f" 状态检查结果:")
print(f" - __INITIAL_STATE__ 存在: {result['stateExists']}")
print(f" - state 的键: {result['stateKeys']}")
print(f" - state.feed 存在: {result['feedExists']}")
print(f" - state.feed 的键: {result['feedKeys']}")
print(f" - state.feed.feeds 存在: {result['feedsExists']}")
print(f" - state.feed.feeds 的键: {result['feedsKeys']}")
print(f" - state.feed.feeds._value 存在: {result['valueExists']}")
print(f" - state.feed.feeds._value 长度: {result['valueLength']}")
if result['valueLength'] > 0:
print(f"\n✓ 成功!找到 {result['valueLength']} 条 Feed")
# 测试 FeedsListAction
print("\n5. 测试 FeedsListAction...")
action = FeedsListAction(page)
feeds = await action.get_feeds_list()
print(f" ✓ FeedsListAction 成功获取 {len(feeds)} 条")
else:
print(f"\n✗ 失败:没有找到 feeds 数据")
# 尝试获取页面内容看看
print("\n6. 检查页面 HTML...")
html = await page.content()
if "登录" in html or "login" in html.lower():
print(" ⚠ 页面可能需要登录")
if "验证" in html or "captcha" in html.lower():
print(" ⚠ 页面可能需要验证")
# 截图
await page.screenshot(path="debug_service_feeds.png")
print(" 已保存截图: debug_service_feeds.png")
except Exception as e:
print(f"\n✗ 错误: {e}")
import traceback
traceback.print_exc()
finally:
await browser.close()
print("\n" + "="*60)
if __name__ == "__main__":
asyncio.run(debug_service_feeds())