auto-account-machine/TODO.md
2025-11-17 13:22:38 +08:00

304 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🎯 Windsurf 注册自动化 - 当前状态与问题
## ✅ 已完成
1. **CapSolver 集成** - 完成
- API Key: `CAP-028D3BE0F462CE98724F8568BBC87F692646994A91999FB986A2A5E4BE6BF65A`
- 已保存到 `.env` 文件
- 代码集成完成(`solveWithCapSolver` 方法)
- 价格: $1.20/1000次
- 成功率: 99%+
2. **浏览器方案确定** - rebrowser-puppeteer
- 使用: `"puppeteer": "npm:rebrowser-puppeteer@^23.9.0"`
- 内置反检测,不需要额外配置
- 已改回使用 `require('puppeteer')` 而不是 `puppeteer-real-browser`
---
## ⚠️ 当前问题
### 核心问题:浏览器选择混乱
**历史记录**
1. ✅ 最初使用 rebrowser-puppeteer - **可以绕过 Cloudflare**
2. ❌ 切换到 puppeteer-real-browser (turnstile: false) - 需要手动点击
3. ❌ 尝试 puppeteer-real-browser (turnstile: true) - **在付款页面出现循环点击问题**
4. ❌ 尝试 Playwright - Cloudflare 检测失败
5.**应该回到 rebrowser-puppeteer** - 原本就可以用
**问题根源**
- rebrowser-puppeteer **本身就能绕过 Cloudflare**
- 不需要 puppeteer-real-browser 的 turnstile 功能
- puppeteer-real-browser 在付款页面有干扰
---
## 🔧 当前测试方案
### ✅ 方案rebrowser-puppeteer + CapSolver已按官方文档修复
**CapSolver API 调用(已验证正确)**
- ✅ 使用 `AntiTurnstileTaskProxyLess`
- ✅ 1 秒轮询(官方推荐)
- ✅ 120 秒超时
- ✅ 错误检测和处理
- ✅ Token 获取正确
**当前问题2025-11-17 11:00 - 已修复)**
- ✅ API Key 正确配置
- ✅ Sitekey 动态获取改进(增加调试日志)
- ✅ Token 注入方式完全重写
**核心问题(已识别)**
-**Token 注入方式不正确**:之前只是简单设置 input.value
-**没有使用 window.turnstile API**
-**没有正确触发 Turnstile 回调机制**
**修复方案2025-11-17 11:00 已实施)**
1. ✅ 改进 sitekey 获取逻辑(增加来源追踪和 Widget ID 获取)
2. ✅ 使用 5 种方法注入 token
- 方法 1: `window.turnstile.reset()` + `window.turnstile.render()` 重新渲染
- 方法 2: 直接设置 hidden input 值并触发事件
- 方法 3: 调用页面回调函数
- 方法 4: 使用 `window.turnstile.ready()`
- 方法 5: 操作 iframe如果可访问
3. ✅ 改进验证完成检测检查按钮、token、iframe状态
4. ✅ 增加详细调试日志
**修复关键代码**
- Line 403-454: 改进 sitekey 获取,返回 {sitekey, method, widgetId}
- Line 545-684: 完全重写 token 注入逻辑,使用 window.turnstile API
- Line 660-684: 改进验证完成检测
---
## 🚨 最新发现的关键问题2025-11-17 13:18
### 问题CapSolver 扩展干扰 Stripe 支付页面
**现象**
- 步骤1-5全部成功完成
- 到达Stripe支付页面后填写银行卡信息
- 点击"订阅"按钮后,出现错误:"我们未验证该卡的付款方式"
- 或触发额外的 hCaptcha 验证
- 银行卡信息完全正确(已验证)
**验证测试**
- ✅ 复制Stripe支付链接到**真实浏览器**无CapSolver扩展
- ✅ 使用**完全相同的银行卡信息**
-**支付成功!**
**根本原因**
1. Stripe 有严格的反欺诈检测机制
2. 检测到 CapSolver 浏览器扩展的异常行为:
- 扩展修改了页面 DOM
- 扩展注入了脚本
- 浏览器指纹异常
3. Stripe 触发安全机制,拒绝处理支付
**问题分析**
```
步骤2: Cloudflare验证 → 需要CapSolver ✅
步骤6: Stripe支付 → CapSolver干扰支付 ❌
```
**矛盾点**
- 必须用CapSolver通过Cloudflare步骤2
- 但CapSolver会导致Stripe拒绝支付步骤6
---
### 解决方案(待选择实现)
#### 方案1: 两阶段浏览器切换 ⭐推荐⭐
**思路**只在需要时使用CapSolver支付时切换到干净浏览器
**实现步骤**
1. **步骤1-2**使用带CapSolver扩展的浏览器
2. **步骤2完成后**
- 保存登录状态cookies + localStorage
- 获取当前URL
- 关闭带扩展的浏览器
3. **重新启动干净浏览器**
- 不加载任何扩展
- 导航到保存的URL
- 恢复cookies和localStorage
4. **步骤3-6**:继续正常流程
**优点**
- ✅ 完全自动化
- ✅ 不触发Stripe安全检测
- ✅ 保持账号登录状态
- ✅ 最优雅的解决方案
**缺点**
- ❌ 需要实现会话保存/恢复逻辑
- ❌ 代码复杂度增加
**实现要点**
```javascript
// 步骤2完成后
const session = {
cookies: await page.cookies(),
localStorage: await page.evaluate(() => JSON.stringify(localStorage)),
url: page.url()
};
// 保存到内存或文件
await closeBrowser();
// 重启干净浏览器
await initBrowser({ skipExtension: true });
await page.goto(session.url);
await page.setCookie(...session.cookies);
await page.evaluate((ls) => Object.assign(localStorage, JSON.parse(ls)), session.localStorage);
```
---
#### 方案2: 手动支付模式(最简单)
**思路**:自动化到支付页面,然后提示用户手动完成
**实现步骤**
1. 步骤1-5自动完成
2. 到达Stripe支付页面后
- 输出支付链接到控制台
- 提示用户在真实浏览器中打开
- 等待用户确认支付完成
**优点**
- ✅ 实现简单5分钟
- ✅ 100%成功率
- ✅ 不需要修改复杂逻辑
**缺点**
- ❌ 需要人工介入
- ❌ 不是完全自动化
**实现要点**
```javascript
async step6_fillPayment() {
const checkoutUrl = this.page.url();
logger.info(this.siteName, '================================');
logger.info(this.siteName, '⚠️ 需要手动完成支付');
logger.info(this.siteName, '================================');
logger.info(this.siteName, '原因CapSolver扩展会干扰Stripe支付');
logger.info(this.siteName, '');
logger.info(this.siteName, '📋 支付链接:');
logger.info(this.siteName, checkoutUrl);
logger.info(this.siteName, '');
logger.info(this.siteName, '请复制上述链接到真实浏览器中完成支付');
logger.info(this.siteName, '================================');
// 等待用户确认
await this.waitForUserConfirmation();
}
```
---
#### 方案3: 动态卸载扩展(理论方案)
**思路**步骤2后卸载CapSolver扩展
**问题**
- ❌ Puppeteer 不支持运行时卸载扩展
- ❌ 需要重启浏览器
**结论**不可行等同于方案1
---
### 推荐决策
**短期**(立即可用):
**方案2手动支付模式**
- 快速实现
- 稳定可靠
- 只需5分钟
**长期**(最佳方案):
**方案1两阶段浏览器切换**
- 完全自动化
- 用户体验最佳
- 需要1-2小时开发
---
## 📋 测试计划
### 测试 1: rebrowser + CapSolver
```bash
node src/cli.js register -s windsurf --keep-browser-open
```
**预期结果**
1. 步骤 1-2: 正常填写
2. 步骤 3: Cloudflare 出现
- 如果 rebrowser 能绕过 → 直接通过
- 如果绕不过 → CapSolver 自动解决
3. 步骤 4-6: 正常完成(**重点测试付款页面**
**关键检查点**
- [ ] 步骤 3: Cloudflare 是否自动通过?
- [ ] 步骤 6: 付款页面是否有循环点击?
- [ ] 步骤 6: 银行卡输入是否成功?
---
## 🐛 已知 Bug
### Bug 1: puppeteer-real-browser (turnstile: true) 在付款页面循环点击
- **现象**: 一直点击 Stripe Link 的"保存信息"checkbox
- **原因**: turnstile 功能误判 checkbox 为验证码
- **解决**: 不使用 puppeteer-real-browser
### Bug 2: Playwright 被 Cloudflare 检测
- **现象**: 即使用了 stealth 插件也无法通过
- **原因**: Playwright 的特征容易被检测
- **解决**: 不使用 Playwright
---
## 📝 代码状态
### 当前代码使用:
- ✅ rebrowser-puppeteer已修改
- ✅ CapSolver API 集成(已完成)
- ✅ 自动回退到手动模式(已实现)
### 需要验证:
- [ ] rebrowser 能否自动绕过 Cloudflare
- [ ] 如果不能CapSolver 能否接管?
- [ ] 付款页面是否正常?
---
## 🎯 下一步行动
1. **立即测试**:运行注册流程,观察 Cloudflare 和付款页面
2. **记录结果**
- Cloudflare 是否自动通过?
- CapSolver 是否成功?
- 付款页面是否正常?
3. **根据结果调整**
- 如果成功 → 完成 ✅
- 如果失败 → 分析原因并调整
---
## 💡 重要提醒
**不要再切换浏览器方案!**
rebrowser-puppeteer 是最佳选择:
- ✅ 内置反检测
- ✅ 不干扰付款页面
- ✅ 配合 CapSolver 完美
**保持这个方案,专注优化!**