Files
ai_wht_wechat/backend/proxy_usage_example.py
2026-01-06 19:36:42 +08:00

230 lines
7.4 KiB
Python

"""
固定代理IP下小红书登录和发文功能示例
展示如何在实际应用中使用代理IP进行小红书操作
"""
import asyncio
import json
import sys
from xhs_login import XHSLoginService
from xhs_publish import XHSPublishService
from damai_proxy_config import get_proxy_config
async def login_with_proxy(phone: str, code: str, proxy_index: int = 0):
"""
使用代理进行小红书登录
Args:
phone: 手机号
code: 验证码
proxy_index: 代理索引 (0 或 1)
"""
print(f"\n{'='*60}")
print(f"📱 使用代理登录小红书")
print(f"{'='*60}")
# 获取代理配置
proxy_config = get_proxy_config(proxy_index)
proxy_server = proxy_config['server'].replace('http://', '')
proxy_url = f"http://{proxy_config['username']}:{proxy_config['password']}@{proxy_server}"
print(f"✅ 使用代理: 代理{proxy_index + 1}")
print(f" 代理服务器: {proxy_config['server']}")
# 创建登录服务
login_service = XHSLoginService()
try:
# 初始化浏览器(使用代理)
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
await login_service.init_browser(proxy=proxy_url, user_agent=user_agent)
print("✅ 浏览器初始化成功(已启用代理)")
# 执行登录
result = await login_service.login(phone, code)
if result.get('success'):
print("✅ 登录成功!")
# 保存Cookies到文件
cookies_full = result.get('cookies_full', [])
if cookies_full:
with open('cookies_proxy.json', 'w', encoding='utf-8') as f:
json.dump(cookies_full, f, ensure_ascii=False, indent=2)
print("✅ 已保存登录Cookies到 cookies_proxy.json")
return result
else:
print(f"❌ 登录失败: {result.get('error')}")
return result
except Exception as e:
print(f"❌ 登录过程异常: {str(e)}")
import traceback
traceback.print_exc()
return {"success": False, "error": str(e)}
finally:
await login_service.close_browser()
async def publish_with_proxy(title: str, content: str, images: list = None, tags: list = None, proxy_index: int = 0, cookies_file: str = 'cookies.json'):
"""
使用代理发布小红书笔记
Args:
title: 笔记标题
content: 笔记内容
images: 图片路径列表
tags: 标签列表
proxy_index: 代理索引 (0 或 1)
cookies_file: Cookies文件路径
"""
print(f"\n{'='*60}")
print(f"📝 使用代理发布小红书笔记")
print(f"{'='*60}")
# 获取代理配置
proxy_config = get_proxy_config(proxy_index)
proxy_server = proxy_config['server'].replace('http://', '')
proxy_url = f"http://{proxy_config['username']}:{proxy_config['password']}@{proxy_server}"
print(f"✅ 使用代理: 代理{proxy_index + 1}")
print(f" 代理服务器: {proxy_config['server']}")
# 读取Cookies
try:
with open(cookies_file, 'r', encoding='utf-8') as f:
cookies = json.load(f)
print(f"✅ 成功读取Cookies: {len(cookies)}")
except FileNotFoundError:
print(f"❌ Cookies文件不存在: {cookies_file}")
return {"success": False, "error": f"Cookies文件不存在: {cookies_file}"}
except Exception as e:
print(f"❌ 读取Cookies失败: {str(e)}")
return {"success": False, "error": str(e)}
# 准备发布数据
images = images or []
tags = tags or []
print(f"📝 发布内容:")
print(f" 标题: {title}")
print(f" 内容: {content[:50]}...") # 只显示前50个字符
print(f" 图片: {len(images)}")
print(f" 标签: {tags}")
# 创建发布服务
try:
publisher = XHSPublishService(cookies, proxy=proxy_url)
# 执行发布
result = await publisher.publish(
title=title,
content=content,
images=images,
tags=tags
)
if result.get('success'):
print("✅ 发布成功!")
else:
print(f"❌ 发布失败: {result.get('error')}")
return result
except Exception as e:
print(f"❌ 发布过程异常: {str(e)}")
import traceback
traceback.print_exc()
return {"success": False, "error": str(e)}
async def test_proxy_functionality():
"""测试代理功能的完整流程"""
print("🚀 开始测试代理功能完整流程")
# 1. 测试代理连接
print(f"\n{'-'*40}")
print("1. 测试代理连接...")
for i in range(2):
proxy_config = get_proxy_config(i)
proxy_server = proxy_config['server'].replace('http://', '')
proxy_url = f"http://{proxy_config['username']}:{proxy_config['password']}@{proxy_server}"
print(f" 代理{i+1}: {proxy_config['server']} - {proxy_url}")
# 2. 演示如何使用代理登录(仅展示,不实际执行)
print(f"\n{'-'*40}")
print("2. 代理登录示例(代码演示)...")
print("""
# 登录示例代码:
async def example_login():
result = await login_with_proxy(
phone="你的手机号", # 实际手机号
code="验证码", # 实际验证码
proxy_index=0 # 使用代理1
)
return result
""")
# 3. 演示如何使用代理发布(仅展示,不实际执行)
print(f"\n{'-'*40}")
print("3. 代理发布示例(代码演示)...")
print("""
# 发布示例代码:
async def example_publish():
result = await publish_with_proxy(
title="测试标题",
content="测试内容",
images=["图片路径1", "图片路径2"], # 可选
tags=["标签1", "标签2"], # 可选
proxy_index=1, # 使用代理2
cookies_file="cookies.json" # Cookies文件路径
)
return result
""")
# 4. 代理轮换策略
print(f"\n{'-'*40}")
print("4. 代理轮换策略...")
print("""
# 代理轮换示例:
class ProxyManager:
def __init__(self):
self.current_proxy = 0
def get_next_proxy(self):
proxy_config = get_proxy_config(self.current_proxy)
self.current_proxy = (self.current_proxy + 1) % 2 # 循环使用两个代理
return proxy_config
""")
print(f"\n{'-'*40}")
print("✅ 代理功能演示完成!")
def main():
"""主函数"""
print("="*60)
print("🎯 固定代理IP下小红书登录发文功能示例")
print("="*60)
# 运行测试
asyncio.run(test_proxy_functionality())
print(f"\n{'='*60}")
print("💡 使用说明:")
print(" 1. 使用 login_with_proxy() 函数进行带代理的登录")
print(" 2. 使用 publish_with_proxy() 函数进行带代理的发布")
print(" 3. 可以轮换使用两个代理IP以提高稳定性")
print(" 4. 代理配置在 damai_proxy_config.py 中管理")
print("="*60)
if __name__ == "__main__":
# Windows环境下设置事件循环策略
if sys.platform == 'win32':
asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
main()