/** * 任务:每日分享 * * 逻辑: * 1. 点击任务卡片上的 .toComplete 按钮 * 2. 等待新页面打开 * 3. 点击邀请按钮 * 4. 关闭新页面 */ const path = require('path'); const { openNewPage, safeClose } = require(path.join(__dirname, '..', 'utils', 'page')); const logger = require(path.join(__dirname, '..', 'utils', 'logger')); /** * 查找并点击任务卡片中的指定按钮 * @param {import('playwright').Page} page - 主页面 */ async function dailyShare(page) { logger.info('👉 执行每日分享'); // 从主页面找到"每日分享"任务卡片 const tasks = await page.locator('.novice-task-item-box').all(); const shareTask = await findTaskByTitle(tasks, '每日分享'); if (!shareTask) { throw new Error('未找到"每日分享"任务卡片'); } // 点击 toComplete 打开分享页 const newPage = await openNewPage( page.context(), () => shareTask.locator('.toComplete').click() ); try { // 点击第一个"立即邀请"按钮 await newPage.locator('.immediately-invite-btn', { hasText: '立即邀请' }).click(); logger.info('分享操作已完成'); await newPage.waitForTimeout(3000); } finally { await safeClose(newPage); } } /** * 根据标题查找任务卡片 * @param {import('playwright').Locator[]} tasks * @param {string} title * @returns {Promise} */ async function findTaskByTitle(tasks, title) { for (const task of tasks) { try { const text = await task.locator('.task-card-title__label-text').innerText(); if (text.includes(title)) { return task; } } catch (_) { // 单个元素定位失败则跳过 } } return null; } module.exports = dailyShare;