Add single task debug mode
This commit is contained in:
127
debugTask.js
Normal file
127
debugTask.js
Normal file
@@ -0,0 +1,127 @@
|
||||
/**
|
||||
* 单任务调试入口
|
||||
*
|
||||
* 示例:
|
||||
* TASK=dailyTrending DEBUG_TASK=true DEBUG_KEEP_OPEN=true node debugTask.js
|
||||
* TASK=updateProject DEBUG_TASK=true DEBUG_KEEP_OPEN=true DEBUG_DRY_RUN=true node debugTask.js
|
||||
*/
|
||||
|
||||
if (!process.env.DEBUG) {
|
||||
process.env.DEBUG = 'true';
|
||||
}
|
||||
if (!process.env.DEBUG_TASK) {
|
||||
process.env.DEBUG_TASK = 'true';
|
||||
}
|
||||
|
||||
const config = require('./config');
|
||||
const logger = require('./utils/logger');
|
||||
const { launchBrowser, createContext } = require('./utils/browser');
|
||||
const { ensureLogin } = require('./utils/login');
|
||||
const { safeGoto } = require('./utils/page');
|
||||
|
||||
const updateProject = require('./tasks/updateProject');
|
||||
const dailyShare = require('./tasks/dailyShare');
|
||||
const dailyCheckIn = require('./tasks/dailyCheckIn');
|
||||
const dailyTrending = require('./tasks/dailyTrending');
|
||||
const dailyStar = require('./tasks/dailyStar');
|
||||
|
||||
const taskMap = {
|
||||
updateProject: {
|
||||
name: '更新项目',
|
||||
handler: updateProject,
|
||||
},
|
||||
dailyTrending: {
|
||||
name: '查看热门',
|
||||
handler: dailyTrending,
|
||||
},
|
||||
trending: {
|
||||
name: '查看热门',
|
||||
handler: dailyTrending,
|
||||
},
|
||||
dailyShare: {
|
||||
name: '每日分享',
|
||||
handler: dailyShare,
|
||||
},
|
||||
dailyCheckIn: {
|
||||
name: '每日签到',
|
||||
handler: dailyCheckIn,
|
||||
},
|
||||
dailyStar: {
|
||||
name: '每日Star',
|
||||
handler: dailyStar,
|
||||
},
|
||||
};
|
||||
|
||||
function printUsage() {
|
||||
logger.info('用法: TASK=<taskName> node debugTask.js');
|
||||
logger.info('可用任务:');
|
||||
Object.keys(taskMap).forEach((key) => logger.info(` ${key}`));
|
||||
logger.info('常用参数: DEBUG_KEEP_OPEN=true DEBUG_PAUSE_EACH_STEP=true DEBUG_DRY_RUN=true');
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const taskKey = process.env.TASK;
|
||||
const task = taskMap[taskKey];
|
||||
|
||||
if (!task) {
|
||||
printUsage();
|
||||
throw new Error(`未知或未指定 TASK: ${taskKey || '(empty)'}`);
|
||||
}
|
||||
|
||||
let browser = null;
|
||||
let context = null;
|
||||
let page = null;
|
||||
|
||||
try {
|
||||
logger.divider();
|
||||
logger.info(`===== 单任务调试: ${task.name} (${taskKey}) =====`);
|
||||
|
||||
browser = await launchBrowser();
|
||||
const created = await createContext(browser);
|
||||
context = created.context;
|
||||
page = await context.newPage();
|
||||
|
||||
logger.divider();
|
||||
logger.info('===== 登录验证 =====');
|
||||
await ensureLogin(page, context);
|
||||
|
||||
logger.divider();
|
||||
logger.info('===== 打开积分中心 =====');
|
||||
await safeGoto(page, config.urls.points, {
|
||||
label: '积分中心',
|
||||
timeout: config.navigationTimeout,
|
||||
waitFor: [
|
||||
'.g-user-avatar',
|
||||
'text=密码登录',
|
||||
'.novice-task-item-box',
|
||||
],
|
||||
});
|
||||
|
||||
logger.divider();
|
||||
logger.info(`===== 执行单任务: ${task.name} =====`);
|
||||
await task.handler(page, {
|
||||
debugTask: true,
|
||||
keepOpen: process.env.DEBUG_KEEP_OPEN === 'true',
|
||||
pauseEachStep: process.env.DEBUG_PAUSE_EACH_STEP === 'true',
|
||||
dryRun: process.env.DEBUG_DRY_RUN === 'true',
|
||||
});
|
||||
|
||||
logger.divider();
|
||||
logger.info(`✅ 单任务调试完成: ${task.name}`);
|
||||
} catch (err) {
|
||||
logger.divider();
|
||||
logger.error(`❌ 单任务调试失败: ${err.message}`);
|
||||
logger.error(err.stack || err.message);
|
||||
process.exitCode = 1;
|
||||
} finally {
|
||||
logger.divider();
|
||||
logger.info('===== 关闭浏览器 =====');
|
||||
if (browser) {
|
||||
await browser.close().catch((err) => {
|
||||
logger.warn(`关闭浏览器失败: ${err.message}`);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user