#!/usr/bin/env python3
"""
创作中心登录 - 保存创作中心的登录态
"""
import asyncio
from browser.browser import BrowserManager
async def login_creator_center():
"""登录创作中心"""
print("="*60)
print("小红书创作中心登录")
print("="*60)
print("\n正在打开浏览器...")
browser = BrowserManager(headless=False)
await browser.start()
try:
page = await browser.new_page()
print("\n1. 导航到创作中心...")
await page.goto("https://creator.xiaohongshu.com", timeout=60000)
await page.wait_for_load_state("load", timeout=60000)
await asyncio.sleep(3)
print(" ✓ 页面已加载")
print("\n2. 检查登录状态...")
# 检查是否需要登录
is_login_page = await page.evaluate("""
() => {
return window.location.href.includes('login') ||
document.querySelector('.login-container') !== null ||
document.querySelector('[class*="login"]') !== null;
}
""")
if is_login_page:
print(" ⚠ 需要登录")
print("\n请在浏览器中完成登录:")
print(" - 可以扫码登录")
print(" - 或使用手机号登录")
print("\n登录成功后,浏览器会自动跳转")
print("等待登录完成...")
# 等待登录完成(URL 不再包含 login)
max_wait = 300 # 5分钟
start_time = asyncio.get_event_loop().time()
while asyncio.get_event_loop().time() - start_time < max_wait:
current_url = page.url
if 'login' not in current_url.lower():
print("\n ✅ 登录成功!")
break
await asyncio.sleep(2)
else:
print("\n ⚠ 登录超时")
return
else:
print(" ✅ 已登录")
# 等待一下确保 cookies 完全设置
await asyncio.sleep(3)
# 导航到发布页面确认登录状态
print("\n3. 验证登录状态...")
await page.goto("https://creator.xiaohongshu.com/publish/publish", timeout=60000)
await page.wait_for_load_state("load", timeout=60000)
await asyncio.sleep(3)
# 检查是否还在登录页
current_url = page.url
if 'login' in current_url.lower():
print(" ✗ 登录验证失败,仍在登录页")
else:
print(" ✅ 登录验证成功!")
print("\n4. 保存登录态...")
# cookies 会在浏览器关闭时自动保存
print("\n按 Ctrl+C 关闭浏览器...")
# 保持浏览器打开
while True:
await asyncio.sleep(1)
except KeyboardInterrupt:
print("\n\n正在保存登录态并关闭浏览器...")
except Exception as e:
print(f"\n✗ 错误: {e}")
import traceback
traceback.print_exc()
finally:
# 关闭时会自动保存 cookies
await browser.close()
print("✓ 登录态已保存")
print("\n" + "="*60)
print("现在可以运行发布测试了:")
print(" python simple_publish_test.py")
print("="*60)
if __name__ == "__main__":
try:
asyncio.run(login_creator_center())
except KeyboardInterrupt:
print("\n程序已退出")