first init
This commit is contained in:
parent
3990aeb478
commit
4b885d4c54
11
db.js
11
db.js
@ -36,19 +36,20 @@ export async function ensureSchema() {
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;`);
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;`);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function saveAccount({ email, password, createdAt, expiresAt, status }) {
|
export async function saveAccount({ email, password, createdAt, expiresAt, status, credits }) {
|
||||||
const p = getPool();
|
const p = getPool();
|
||||||
if (!p) return;
|
if (!p) return;
|
||||||
await ensureSchema();
|
await ensureSchema();
|
||||||
const sql = `INSERT INTO accounts (email, password, status, created_at, expires_at)
|
const sql = `INSERT INTO accounts (email, password, status, created_at, expires_at, credits)
|
||||||
VALUES (?, ?, ?, ?, ?)
|
VALUES (?, ?, ?, ?, ?, ?)
|
||||||
ON DUPLICATE KEY UPDATE password=VALUES(password), status=VALUES(status), created_at=VALUES(created_at), expires_at=VALUES(expires_at)`;
|
ON DUPLICATE KEY UPDATE password=VALUES(password), status=VALUES(status), created_at=VALUES(created_at), expires_at=VALUES(expires_at), credits=VALUES(credits)`;
|
||||||
await p.execute(sql, [
|
await p.execute(sql, [
|
||||||
email,
|
email,
|
||||||
password,
|
password,
|
||||||
status,
|
status,
|
||||||
formatDateTime(createdAt),
|
formatDateTime(createdAt),
|
||||||
formatDateTime(expiresAt)
|
formatDateTime(expiresAt),
|
||||||
|
credits
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
index.js
16
index.js
@ -79,19 +79,22 @@ async function main() {
|
|||||||
console.log('📧 本次注册邮箱:', email);
|
console.log('📧 本次注册邮箱:', email);
|
||||||
|
|
||||||
// 执行注册
|
// 执行注册
|
||||||
const success = await registerOnce(emailPage, registerPage, email);
|
const result = await registerOnce(emailPage, registerPage, email);
|
||||||
|
|
||||||
// 关闭注册页,准备下次
|
// 关闭注册页,准备下次
|
||||||
try { await registerPage.close(); } catch {}
|
try { await registerPage.close(); } catch {}
|
||||||
registerPage = await registerContext.newPage();
|
registerPage = await registerContext.newPage();
|
||||||
|
|
||||||
if (success) {
|
if (result && result.success) {
|
||||||
successCount++;
|
successCount++;
|
||||||
console.log('\n🎉 ============================================');
|
console.log('\n🎉 ============================================');
|
||||||
console.log(' 注册成功!');
|
console.log(' 注册成功!');
|
||||||
console.log('============================================');
|
console.log('============================================');
|
||||||
console.log('📧 邮箱:', email);
|
console.log('📧 邮箱:', email);
|
||||||
console.log('🔑 密码:', config.verdent.password);
|
console.log('🔑 密码:', config.verdent.password);
|
||||||
|
if (result.credits) {
|
||||||
|
console.log('💳 额度:', result.credits);
|
||||||
|
}
|
||||||
console.log('============================================\n');
|
console.log('============================================\n');
|
||||||
|
|
||||||
// 邮件页面回退到收件箱
|
// 邮件页面回退到收件箱
|
||||||
@ -113,7 +116,14 @@ async function main() {
|
|||||||
const createdAt = new Date();
|
const createdAt = new Date();
|
||||||
const expiresAt = new Date(createdAt.getTime() + 7 * 24 * 60 * 60 * 1000);
|
const expiresAt = new Date(createdAt.getTime() + 7 * 24 * 60 * 60 * 1000);
|
||||||
try {
|
try {
|
||||||
await saveAccount({ email, password: config.verdent.password, createdAt, expiresAt, status: 'active' });
|
await saveAccount({
|
||||||
|
email,
|
||||||
|
password: config.verdent.password,
|
||||||
|
createdAt,
|
||||||
|
expiresAt,
|
||||||
|
status: 'active',
|
||||||
|
credits: result.credits || null
|
||||||
|
});
|
||||||
console.log('[DB] ✅ 账号已写入数据库');
|
console.log('[DB] ✅ 账号已写入数据库');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('[DB] ⚠️ 写入失败:', e.message);
|
console.log('[DB] ⚠️ 写入失败:', e.message);
|
||||||
|
|||||||
@ -247,11 +247,26 @@ export async function completeRegistration(page, verificationCode) {
|
|||||||
|
|
||||||
const finalUrl = page.url();
|
const finalUrl = page.url();
|
||||||
console.log('✅ 已跳转到 Dashboard:', finalUrl);
|
console.log('✅ 已跳转到 Dashboard:', finalUrl);
|
||||||
|
|
||||||
|
// 第三步:获取额度信息
|
||||||
|
await page.waitForTimeout(2000);
|
||||||
|
let credits = null;
|
||||||
|
try {
|
||||||
|
console.log('💳 步骤 3: 获取额度信息...');
|
||||||
|
const creditsElement = page.locator('.left-number').first();
|
||||||
|
const creditsText = await creditsElement.textContent({ timeout: 5000 });
|
||||||
|
credits = creditsText.trim();
|
||||||
|
console.log('✅ 额度:', credits);
|
||||||
|
} catch (e) {
|
||||||
|
console.log('⚠️ 获取额度失败:', e.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { success: true, credits };
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('⚠️ 跳转 Dashboard 失败:', e.message);
|
console.log('⚠️ 跳转 Dashboard 失败:', e.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return { success: true, credits: null };
|
||||||
} else {
|
} else {
|
||||||
// 检查是否有错误提示
|
// 检查是否有错误提示
|
||||||
const errorElement = page.locator('[class*="error"], [class*="alert"]').first();
|
const errorElement = page.locator('[class*="error"], [class*="alert"]').first();
|
||||||
|
|||||||
65
start.bat
Normal file
65
start.bat
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 65001 >nul
|
||||||
|
echo ========================================
|
||||||
|
echo Verdent 自动注册工具启动脚本
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 检查 Node.js 是否安装
|
||||||
|
where node >nul 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [错误] 未检测到 Node.js,请先安装 Node.js
|
||||||
|
echo 下载地址: https://nodejs.org/
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [✓] Node.js 已安装
|
||||||
|
node --version
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 检查是否已安装依赖
|
||||||
|
if not exist "node_modules\" (
|
||||||
|
echo [!] 检测到依赖未安装,开始安装...
|
||||||
|
echo.
|
||||||
|
call npm install
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [错误] 依赖安装失败
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
echo.
|
||||||
|
echo [✓] 依赖安装完成
|
||||||
|
echo.
|
||||||
|
) else (
|
||||||
|
echo [✓] 依赖已安装
|
||||||
|
echo.
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 设置环境变量
|
||||||
|
set ADSPOWER_USER_ID=k16x0qt2
|
||||||
|
set DB_HOST=172.22.222.111
|
||||||
|
set DB_PORT=3306
|
||||||
|
set DB_USER=auto-register-verdent
|
||||||
|
set DB_PASS=Qichen5210523
|
||||||
|
set DB_NAME=auto-register-verdent
|
||||||
|
|
||||||
|
echo ========================================
|
||||||
|
echo 启动配置:
|
||||||
|
echo - AdsPower ID: %ADSPOWER_USER_ID%
|
||||||
|
echo - 数据库: %DB_HOST%:%DB_PORT%
|
||||||
|
echo - 数据库名: %DB_NAME%
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
echo [启动] 开始运行注册程序...
|
||||||
|
echo 按 Ctrl+C 可停止程序
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM 启动程序
|
||||||
|
node index.js
|
||||||
|
|
||||||
|
REM 程序结束后暂停
|
||||||
|
echo.
|
||||||
|
echo ========================================
|
||||||
|
echo 程序已退出
|
||||||
|
pause
|
||||||
Loading…
Reference in New Issue
Block a user