feat: Implement S2A OAuth authorization using chromedp and introduce new files for browser automation and team processing.

This commit is contained in:
2026-02-02 05:54:55 +08:00
parent 74796a16dd
commit 5a3b3aa8ef
3 changed files with 108 additions and 35 deletions

View File

@@ -902,23 +902,53 @@ func processSingleTeam(idx int, req TeamProcessRequest) (result TeamProcessResul
return result
}
// registerWithTimeout 带超时的注册
// registerWithTimeout 带超时的注册(遇到 403 会换指纹重试)
func registerWithTimeout(email, password, name, birthdate, proxy string) (*register.ChatGPTReg, error) {
reg, err := register.New(proxy)
if err != nil {
return nil, err
const maxInitRetries = 3
var reg *register.ChatGPTReg
var initErr error
// 初始化阶段:遇到 403 换指纹重试
for attempt := 0; attempt < maxInitRetries; attempt++ {
var err error
reg, err = register.New(proxy)
if err != nil {
return nil, err
}
if err := reg.InitSession(); err != nil {
initErr = err
// 检查是否是 403 错误,换指纹重试
if strings.Contains(err.Error(), "403") {
continue
}
return nil, fmt.Errorf("初始化失败: %v", err)
}
if err := reg.GetAuthorizeURL(email); err != nil {
// 403 也可能在这里出现
if strings.Contains(err.Error(), "403") {
initErr = err
continue
}
return nil, fmt.Errorf("获取授权URL失败: %v", err)
}
if err := reg.StartAuthorize(); err != nil {
if strings.Contains(err.Error(), "403") {
initErr = err
continue
}
return nil, fmt.Errorf("启动授权失败: %v", err)
}
// 初始化成功,跳出重试循环
initErr = nil
break
}
if err := reg.InitSession(); err != nil {
return nil, fmt.Errorf("初始化失败: %v", err)
}
if err := reg.GetAuthorizeURL(email); err != nil {
return nil, fmt.Errorf("获取授权URL失败: %v", err)
}
if err := reg.StartAuthorize(); err != nil {
return nil, fmt.Errorf("启动授权失败: %v", err)
if initErr != nil {
return nil, fmt.Errorf("初始化失败(重试%d次): %v", maxInitRetries, initErr)
}
if err := reg.Register(email, password); err != nil {