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

8.5 KiB
Raw Blame History

🎯 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安全检测
  • 保持账号登录状态
  • 最优雅的解决方案

缺点

  • 需要实现会话保存/恢复逻辑
  • 代码复杂度增加

实现要点

// 步骤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%成功率
  • 不需要修改复杂逻辑

缺点

  • 需要人工介入
  • 不是完全自动化

实现要点

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

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 完美

保持这个方案,专注优化!