单个账号流注册流程

This commit is contained in:
zyj
2025-09-27 18:13:59 +08:00
parent 90dfc3ac38
commit 22e21f6eb8
12 changed files with 404 additions and 29 deletions

View File

@@ -0,0 +1,88 @@
package services
import (
"context"
"errors"
"fmt"
"go-account-register/libs"
"log"
"time"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/cdp"
)
type TwitterService struct{}
// 登录
func (*TwitterService) Login(id int) *libs.ErrorInfo {
UserService := InitTwitterAccountService()
user := UserService.GetInfo(int64(id))
obj := Browser.GetBrowser(id, &libs.Fingerprint{
Proxy: user.Proxy,
})
browser := obj.Browser
page := obj.Page
err3 := rod.Try(func() {
// 创建 Cookie 对象
cookies := user.Cookies
log.Println("获取cookie", cookies)
// 全局设置
browser.SetCookies(cookies)
page.MustNavigate("https://x.com/home").MustWaitLoad()
page.MustWaitNavigation()
})
if e, ok := err3.(*cdp.Error); ok {
if e.Code == -32000 && e.Message == "Inspected target navigated or closed" {
Browser.CancelBrowser(id)
return libs.ErrorCode["LoginFailed"]
}
}
time.Sleep(3 * time.Second)
url := page.MustEval("() => window.location.href").String()
if url == "https://x.com/account/access" {
Browser.CancelBrowser(id)
return libs.ErrorCode["AccountLocked"]
}
log.Println(url)
err1 := rod.Try(func() {
page.Timeout(5 * time.Second).MustElement(`input[autocomplete="username"]`)
})
if err1 == nil {
Browser.CancelBrowser(id)
return libs.ErrorCode["LoginFailed"]
}
// 是否检测到侧边栏
err2 := rod.Try(func() {
page.Timeout(5 * time.Second).MustElement(`a[data-testid="AppTabBar_Profile_Link"]`)
})
if err2 != nil {
Browser.CancelBrowser(id)
return libs.ErrorCode["LoginFailed"]
}
// 是否检测到帖子列表
err := rod.Try(func() {
page.Timeout(5 * time.Second).MustElement(`article[data-testid="tweet"]`)
})
if errors.Is(err, context.DeadlineExceeded) {
fmt.Println("请求空闲等待超时!")
// 关闭浏览器
Browser.CancelBrowser(id)
return libs.ErrorCode["NetworkTimeout"]
}
if err != nil {
fmt.Println(err)
}
return libs.ErrorCode["LoginSuccessful"]
}
// 退出登录
func (*TwitterService) Logout(id int) {
Browser.CancelBrowser(id)
}