232 lines
6.6 KiB
Python
232 lines
6.6 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
小红书笔记上传器测试脚本
|
||
|
||
用于测试优化后的图文笔记上传功能
|
||
"""
|
||
|
||
import sys
|
||
import os
|
||
import asyncio
|
||
from pathlib import Path
|
||
from datetime import datetime, timedelta
|
||
|
||
# 添加项目根目录到系统路径
|
||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||
project_root = os.path.dirname(current_dir)
|
||
sys.path.append(project_root)
|
||
|
||
from conf import BASE_DIR
|
||
from uploader.xhs_note_uploader.main import (
|
||
XiaoHongShuImageNote,
|
||
XiaoHongShuVideoNote,
|
||
xiaohongshu_note_setup
|
||
)
|
||
|
||
|
||
async def test_image_note_immediate():
|
||
"""测试立即发布图文笔记"""
|
||
|
||
print("\n" + "=" * 60)
|
||
print("【测试1】立即发布图文笔记")
|
||
print("=" * 60)
|
||
|
||
# Cookie文件路径
|
||
account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
|
||
account_file.parent.mkdir(parents=True, exist_ok=True)
|
||
|
||
# 检查Cookie
|
||
cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=True)
|
||
if not cookie_valid:
|
||
print("❌ Cookie无效,请重新登录")
|
||
return False
|
||
|
||
# 准备图片
|
||
image_paths = [
|
||
str(Path(BASE_DIR) / "videos" / "demo.png"),
|
||
]
|
||
|
||
# 验证图片存在
|
||
for img_path in image_paths:
|
||
if not os.path.exists(img_path):
|
||
print(f"❌ 图片不存在: {img_path}")
|
||
return False
|
||
|
||
try:
|
||
# 创建图文笔记
|
||
note = XiaoHongShuImageNote(
|
||
title="测试图文笔记标题✨",
|
||
content="这是一条测试笔记的正文内容~\n\n测试优化后的上传功能!",
|
||
tags=["测试", "笔记"],
|
||
image_paths=image_paths,
|
||
publish_date=0, # 立即发布
|
||
account_file=str(account_file),
|
||
location="上海市",
|
||
headless=False # 有头模式,方便观察
|
||
)
|
||
|
||
# 执行上传
|
||
await note.main()
|
||
|
||
print("\n✅ 测试1通过:立即发布图文笔记成功")
|
||
return True
|
||
|
||
except Exception as e:
|
||
print(f"\n❌ 测试1失败: {e}")
|
||
return False
|
||
|
||
|
||
async def test_image_note_scheduled():
|
||
"""测试定时发布图文笔记"""
|
||
|
||
print("\n" + "=" * 60)
|
||
print("【测试2】定时发布图文笔记")
|
||
print("=" * 60)
|
||
|
||
# Cookie文件路径
|
||
account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
|
||
|
||
# 检查Cookie
|
||
cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=False)
|
||
if not cookie_valid:
|
||
print("❌ Cookie无效")
|
||
return False
|
||
|
||
# 准备图片
|
||
image_paths = [
|
||
str(Path(BASE_DIR) / "videos" / "demo.png"),
|
||
]
|
||
|
||
# 设置发布时间(2小时后)
|
||
publish_time = datetime.now() + timedelta(hours=2)
|
||
publish_time = publish_time.replace(second=0, microsecond=0)
|
||
|
||
try:
|
||
# 创建图文笔记
|
||
note = XiaoHongShuImageNote(
|
||
title="定时发布测试笔记⏰",
|
||
content="这是一条定时发布的测试笔记~\n\n将在2小时后发布!",
|
||
tags=["定时发布", "测试"],
|
||
image_paths=image_paths,
|
||
publish_date=publish_time,
|
||
account_file=str(account_file),
|
||
headless=False
|
||
)
|
||
|
||
# 执行上传
|
||
await note.main()
|
||
|
||
print(f"\n✅ 测试2通过:定时发布设置成功(发布时间:{publish_time})")
|
||
return True
|
||
|
||
except Exception as e:
|
||
print(f"\n❌ 测试2失败: {e}")
|
||
return False
|
||
|
||
|
||
async def test_video_note():
|
||
"""测试视频笔记上传"""
|
||
|
||
print("\n" + "=" * 60)
|
||
print("【测试3】视频笔记上传")
|
||
print("=" * 60)
|
||
|
||
# Cookie文件路径
|
||
account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
|
||
|
||
# 检查Cookie
|
||
cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=False)
|
||
if not cookie_valid:
|
||
print("❌ Cookie无效")
|
||
return False
|
||
|
||
# 准备视频
|
||
video_path = str(Path(BASE_DIR) / "videos" / "demo.mp4")
|
||
|
||
if not os.path.exists(video_path):
|
||
print(f"❌ 视频不存在: {video_path}")
|
||
return False
|
||
|
||
try:
|
||
# 创建视频笔记
|
||
note = XiaoHongShuVideoNote(
|
||
title="测试视频笔记🎬",
|
||
content="这是一条测试视频笔记的正文内容~\n\n测试优化后的视频上传功能!",
|
||
tags=["视频测试", "笔记"],
|
||
video_path=video_path,
|
||
publish_date=0, # 立即发布
|
||
account_file=str(account_file),
|
||
headless=False
|
||
)
|
||
|
||
# 执行上传
|
||
await note.main()
|
||
|
||
print("\n✅ 测试3通过:视频笔记上传成功")
|
||
return True
|
||
|
||
except Exception as e:
|
||
print(f"\n❌ 测试3失败: {e}")
|
||
return False
|
||
|
||
|
||
async def run_all_tests():
|
||
"""运行所有测试"""
|
||
|
||
print("\n" + "=" * 60)
|
||
print("小红书笔记上传器 - 完整测试")
|
||
print("=" * 60)
|
||
|
||
results = []
|
||
|
||
# 测试1:立即发布图文笔记
|
||
result1 = await test_image_note_immediate()
|
||
results.append(("立即发布图文笔记", result1))
|
||
|
||
if result1:
|
||
# 等待一段时间再继续测试(避免频繁操作)
|
||
print("\n⏰ 等待30秒后继续下一个测试...")
|
||
await asyncio.sleep(30)
|
||
|
||
# 测试2:定时发布图文笔记
|
||
# result2 = await test_image_note_scheduled()
|
||
# results.append(("定时发布图文笔记", result2))
|
||
|
||
# if result2:
|
||
# print("\n⏰ 等待30秒后继续下一个测试...")
|
||
# await asyncio.sleep(30)
|
||
|
||
# 测试3:视频笔记上传
|
||
# result3 = await test_video_note()
|
||
# results.append(("视频笔记上传", result3))
|
||
|
||
# 打印测试结果
|
||
print("\n" + "=" * 60)
|
||
print("测试结果汇总")
|
||
print("=" * 60)
|
||
|
||
for test_name, result in results:
|
||
status = "✅ 通过" if result else "❌ 失败"
|
||
print(f"{status} - {test_name}")
|
||
|
||
passed = sum(1 for _, r in results if r)
|
||
total = len(results)
|
||
|
||
print(f"\n总计:{passed}/{total} 个测试通过")
|
||
|
||
if passed == total:
|
||
print("\n🎉 所有测试通过!")
|
||
else:
|
||
print("\n⚠️ 部分测试失败,请检查错误信息")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# 运行所有测试
|
||
asyncio.run(run_all_tests())
|
||
|
||
# 如果只想运行单个测试,注释掉上面一行,取消下面的注释:
|
||
# asyncio.run(test_image_note_immediate())
|
||
# asyncio.run(test_image_note_scheduled())
|
||
# asyncio.run(test_video_note())
|
||
|