- 移除全局浏览器单例,改为按需创建浏览器实例 - 添加 configs/browser.go 用于管理无头模式配置 - 更新 service.go 中所有方法,每次调用时创建新的浏览器实例 - 更新测试文件,使用新的浏览器管理方式 - 确保每个浏览器实例使用后正确关闭,避免资源泄漏 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com>
74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/go-rod/rod"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/xpzouying/xiaohongshu-mcp/browser"
|
|
"github.com/xpzouying/xiaohongshu-mcp/cookies"
|
|
"github.com/xpzouying/xiaohongshu-mcp/xiaohongshu"
|
|
)
|
|
|
|
func main() {
|
|
|
|
// 登录的时候,需要界面,所以不能无头模式
|
|
b := browser.NewBrowser(false)
|
|
defer b.Close()
|
|
|
|
page := b.NewPage()
|
|
defer page.Close()
|
|
|
|
action := xiaohongshu.NewLogin(page)
|
|
|
|
status, err := action.CheckLoginStatus(context.Background())
|
|
if err != nil {
|
|
logrus.Fatalf("failed to check login status: %v", err)
|
|
}
|
|
|
|
logrus.Infof("当前登录状态: %v", status)
|
|
|
|
if status {
|
|
return
|
|
}
|
|
|
|
// 开始登录流程
|
|
logrus.Info("开始登录流程...")
|
|
if err = action.Login(context.Background()); err != nil {
|
|
logrus.Fatalf("登录失败: %v", err)
|
|
} else {
|
|
if err := saveCookies(page); err != nil {
|
|
logrus.Fatalf("failed to save cookies: %v", err)
|
|
}
|
|
}
|
|
|
|
// 再次检查登录状态确认成功
|
|
status, err = action.CheckLoginStatus(context.Background())
|
|
if err != nil {
|
|
logrus.Fatalf("failed to check login status after login: %v", err)
|
|
}
|
|
|
|
if status {
|
|
logrus.Info("登录成功!")
|
|
} else {
|
|
logrus.Error("登录流程完成但仍未登录")
|
|
}
|
|
|
|
}
|
|
|
|
func saveCookies(page *rod.Page) error {
|
|
cks, err := page.Browser().GetCookies()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data, err := json.Marshal(cks)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
cookieLoader := cookies.NewLoadCookie(cookies.GetCookiesFilePath())
|
|
return cookieLoader.SaveCookies(data)
|
|
}
|