单个账号流注册流程
This commit is contained in:
88
services/twitter_service.go
Normal file
88
services/twitter_service.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user