* feat: 添加 Chrome 浏览器支持和安装说明折叠 - 支持 Chrome 浏览器作为备选方案 - README 安装部分使用 details 标签折叠 - 优化浏览器配置和初始化逻辑 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: 更新 README.md 以包含 Windows 问题和登录部分说明 - 添加 Windows 问题的链接以供参考 - 更新 README 中的登录部分内容 --------- Co-authored-by: Claude <noreply@anthropic.com>
80 lines
1.7 KiB
Go
80 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"flag"
|
|
|
|
"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() {
|
|
var (
|
|
binPath string // 浏览器二进制文件路径
|
|
)
|
|
flag.StringVar(&binPath, "bin", "", "浏览器二进制文件路径")
|
|
flag.Parse()
|
|
|
|
// 登录的时候,需要界面,所以不能无头模式
|
|
b := browser.NewBrowser(false, browser.WithBinPath(binPath))
|
|
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)
|
|
}
|