increase automatic login

This commit is contained in:
被遗忘的记忆
2024-08-25 19:02:00 +08:00
committed by GitHub
parent c421d2f777
commit 484d63c563
+24 -14
View File
@@ -18,7 +18,7 @@ class YouProvider {
this.config = config;
this.sessions = {};
// 可以是 'chrome', 'edge', 或 'auto'
this.preferredBrowser = 'edge';
this.preferredBrowser = 'auto';
this.isCustomModeEnabled = process.env.USE_CUSTOM_MODE === "true";
this.isRotationEnabled = process.env.ENABLE_MODE_ROTATION === "true";
this.currentMode = "default";
@@ -128,18 +128,17 @@ class YouProvider {
// 等待页面加载完毕
await sleep(5000);
console.log(`请在打开的浏览器窗口中手动登录 You.com (session #${session.configIndex})`);
await this.waitForManualLogin(page);
const cookies = await page.cookies();
const sessionCookie = this.extractSessionCookie(cookies);
const { loginInfo, sessionCookie } = await this.waitForManualLogin(page);
if (sessionCookie) {
this.sessions[sessionCookie.email] = {
const email = loginInfo || sessionCookie.email;
this.sessions[email] = {
...session,
...sessionCookie,
};
delete this.sessions[username];
username = sessionCookie.email;
username = email;
session = this.sessions[username];
console.log(`成功获取 ${sessionCookie.email} 登录的 cookie`);
console.log(`成功获取 ${email} 登录的 cookie`);
} else {
console.error(`未能获取到 session #${session.configIndex} 有效登录的 cookie`);
await browser.close();
@@ -200,20 +199,31 @@ class YouProvider {
async waitForManualLogin(page) {
return new Promise((resolve) => {
const checkLoginStatus = async () => {
const isLoggedIn = await page.evaluate(() => {
return !!document.querySelector('button[aria-label="User menu"]');
const loginInfo = await page.evaluate(() => {
const userProfileElement = document.querySelector('[data-testid="user-profile-button"]');
if (userProfileElement) {
const emailElement = userProfileElement.querySelector('.sc-9d7dc8d-4');
return emailElement ? emailElement.textContent : null;
}
return null;
});
if (isLoggedIn) {
console.log("检测到登录成功");
resolve();
if (loginInfo) {
console.log(`检测到自动登录成功: ${loginInfo}`);
// 立即获取 cookie
const cookies = await page.cookies();
const sessionCookie = this.extractSessionCookie(cookies);
resolve({ loginInfo, sessionCookie });
} else {
setTimeout(checkLoginStatus, 1000);
}
};
page.on('request', request => {
page.on('request', async (request) => {
if (request.url().includes('https://you.com/api/instrumentation')) {
resolve();
const cookies = await page.cookies();
const sessionCookie = this.extractSessionCookie(cookies);
resolve({ loginInfo: null, sessionCookie });
}
});