github-actions[bot]
Update from GitHub Actions
dd27eb1
import { chromium } from 'playwright';
import fs from 'fs';
import config from './config.js';
import { fileURLToPath } from 'url';
import path from 'path';
import { loadCookies } from './utils/common-utils.js';
import { info, error } from './utils/logger.js';
async function login() {
info('启动浏览器...');
const browser = await chromium.launch(config.browserOptions);
const context = await browser.newContext();
const cookies = loadCookies(config.cookieFile, config.cookiesFromEnv);
await context.addCookies(cookies);
const page = await context.newPage();
try {
info(`导航到登录页面:${config.webideUrl}...`);
// 首先访问主页面,通常会重定向到登录页面
await page.goto(config.webideUrl);
// 等待页面加载
await page.waitForTimeout(config.waitTimes.pageLoad);
info('当前页面URL:', page.url());
info('页面标题:', await page.title());
// 检查是否已经登录(如果页面包含编辑器元素,说明已登录)
const isLoggedIn = await page.locator(config.selectors.editor).count() > 0;
if (isLoggedIn) {
info('检测到已经登录状态,保存cookie...');
} else {
info('需要登录,请在浏览器中手动完成登录过程...');
info('登录完成后,请按 Enter 键继续...');
// 等待用户手动登录
await waitForUserInput();
// 等待登录完成,检查是否出现编辑器界面
info('等待登录完成...');
try {
await page.goto(config.webideUrl);
await page.waitForSelector(config.selectors.editor, {
timeout: 60000
});
} catch (err) {
info('未检测到编辑器界面,但继续保存cookie...');
}
}
// 保存cookies
const cookies = await context.cookies();
fs.writeFileSync(config.cookieFile, JSON.stringify(cookies, null, 2));
info(`Cookies已保存到 ${config.cookieFile}`);
info(`保存了 ${cookies.length} 个cookies`);
// 显示保存的cookie信息(仅显示名称,不显示值)
info('保存的cookie名称:');
cookies.forEach(cookie => {
info(` - ${cookie.name} (域名: ${cookie.domain})`);
});
} catch (err) {
error('登录过程中发生错误:', err);
} finally {
await browser.close();
}
}
// 等待用户输入的辅助函数
async function waitForUserInput() {
const { default: readline } = await import('readline');
return new Promise((resolve) => {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('', () => {
rl.close();
resolve();
});
});
}
// 运行命令执行脚本
const __filename = fileURLToPath(import.meta.url);
const scriptPath = path.resolve(process.argv[1]);
if (path.resolve(__filename) === scriptPath) {
login().catch(error);
}