first init
This commit is contained in:
parent
8abea7a7c6
commit
593ffbf289
51
index.js
51
index.js
@ -7,26 +7,53 @@ import { generateUsername } from './util.js';
|
||||
import { saveAccount } from './db.js';
|
||||
|
||||
/**
|
||||
* 主自动注册流程
|
||||
* 单次注册流程
|
||||
*/
|
||||
async function registerOnce(emailPage, registerPage, email) {
|
||||
// ========== 开始 Verdent 注册 ==========
|
||||
console.log('\n🌐 === 步骤 1: 开始 Verdent.ai 注册 ===');
|
||||
const { sentAtMs } = await registerOnVerdent(registerPage, email);
|
||||
|
||||
// ========== 等待验证码邮件 ==========
|
||||
console.log('\n📬 === 步骤 2: 等待验证码邮件 ===');
|
||||
const verificationCode = await waitForVerificationCode(emailPage, sentAtMs, email);
|
||||
|
||||
if (!verificationCode) {
|
||||
throw new Error('未能获取验证码');
|
||||
}
|
||||
|
||||
// ========== 完成注册 ==========
|
||||
console.log('\n✅ === 步骤 3: 完成注册 ===');
|
||||
const success = await completeRegistration(registerPage, verificationCode);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* 主自动注册流程(循环模式)
|
||||
*/
|
||||
async function main() {
|
||||
console.log('🚀 开始自动注册流程...\n');
|
||||
console.log('🚀 开始自动注册流程(循环模式)...\n');
|
||||
|
||||
let browser;
|
||||
let emailContext;
|
||||
let registerContext;
|
||||
let emailPage;
|
||||
let registerPage;
|
||||
let successCount = 0;
|
||||
let failureCount = 0;
|
||||
|
||||
try {
|
||||
// 启动或连接到浏览器(支持指纹浏览器/AdsPower/自定义 WS)
|
||||
// 启动浏览器
|
||||
console.log('🌐 启动浏览器...');
|
||||
({ browser, emailContext, registerContext } = await getBrowserAndContexts({
|
||||
headless: config.browser.headless,
|
||||
slowMo: config.browser.slowMo,
|
||||
}));
|
||||
|
||||
// 创建页面
|
||||
const emailPage = await emailContext.newPage();
|
||||
let registerPage = await registerContext.newPage();
|
||||
// 创建邮箱页面(保持不关)
|
||||
emailPage = await emailContext.newPage();
|
||||
registerPage = await registerContext.newPage();
|
||||
|
||||
// 生成唯一用户名(随机 + 时间)
|
||||
const localPart = generateUsername('qichen');
|
||||
@ -71,6 +98,18 @@ async function main() {
|
||||
console.log('🔑 密码:', config.verdent.password);
|
||||
console.log('============================================\n');
|
||||
|
||||
// 邮件页面回退到收件箱列表,避免下次重复输入 PIN
|
||||
try {
|
||||
console.log('[邮箱] 回退到收件箱列表...');
|
||||
await emailPage.goBack({ waitUntil: 'domcontentloaded', timeout: 5000 });
|
||||
await emailPage.waitForTimeout(1500);
|
||||
console.log('[邮箱] ✅ 已回退到收件箱');
|
||||
} catch (e) {
|
||||
console.log('[邮箱] 回退失败,尝试直接跳转:', e.message);
|
||||
await emailPage.goto('https://tempmail.plus/zh/', { waitUntil: 'domcontentloaded', timeout: 10000 }).catch(() => {});
|
||||
await emailPage.waitForTimeout(1500);
|
||||
}
|
||||
|
||||
// 更新基线为当前最新邮件时间
|
||||
await updateBaseline(emailPage);
|
||||
|
||||
|
||||
@ -94,12 +94,29 @@ async function handleTurnstile(page) {
|
||||
*/
|
||||
export async function registerOnVerdent(page, email) {
|
||||
console.log('🌐 开始 Verdent.ai 注册流程...');
|
||||
|
||||
// 打开注册页面(带重试)
|
||||
let pageOpened = false;
|
||||
for (let attempt = 1; attempt <= 3; attempt++) {
|
||||
try {
|
||||
console.log(`[尝试 ${attempt}/3] 打开注册页面...`);
|
||||
await page.goto(config.verdent.signupUrl, { waitUntil: 'domcontentloaded', timeout: 30000 });
|
||||
pageOpened = true;
|
||||
console.log('✅ 页面加载成功');
|
||||
break;
|
||||
} catch (e) {
|
||||
console.log(`⚠️ 第 ${attempt} 次打开失败:`, e.message);
|
||||
if (attempt < 3) {
|
||||
console.log('等待 3 秒后重试...');
|
||||
await page.waitForTimeout(3000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!pageOpened) {
|
||||
throw new Error('打开注册页面失败,已重试 3 次');
|
||||
}
|
||||
|
||||
// 访问注册页面
|
||||
await page.goto(config.verdent.signupUrl, {
|
||||
waitUntil: 'domcontentloaded',
|
||||
timeout: 60000
|
||||
});
|
||||
await page.waitForTimeout(3000);
|
||||
|
||||
// 输入邮箱地址
|
||||
|
||||
Loading…
Reference in New Issue
Block a user