fix login crash
This commit is contained in:
@@ -454,8 +454,12 @@ class YouProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async waitForManualLogin(page) {
|
async waitForManualLogin(page) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
let isResolved = false; // 标记是否已完成
|
||||||
|
let timeoutId;
|
||||||
|
|
||||||
const checkLoginStatus = async () => {
|
const checkLoginStatus = async () => {
|
||||||
|
try {
|
||||||
const loginInfo = await page.evaluate(() => {
|
const loginInfo = await page.evaluate(() => {
|
||||||
const userProfileElement = document.querySelector('[data-testid="user-profile-button"]');
|
const userProfileElement = document.querySelector('[data-testid="user-profile-button"]');
|
||||||
if (userProfileElement) {
|
if (userProfileElement) {
|
||||||
@@ -470,31 +474,60 @@ class YouProvider {
|
|||||||
const cookies = await page.cookies();
|
const cookies = await page.cookies();
|
||||||
const sessionCookie = this.extractSessionCookie(cookies);
|
const sessionCookie = this.extractSessionCookie(cookies);
|
||||||
|
|
||||||
// 设置 隐身模式 cookie
|
// 设置隐身模式 cookie
|
||||||
if (sessionCookie) {
|
if (sessionCookie) {
|
||||||
await page.setCookie(...sessionCookie);
|
await page.setCookie(...sessionCookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isResolved = true;
|
||||||
|
clearTimeout(timeoutId);
|
||||||
resolve({loginInfo, sessionCookie});
|
resolve({loginInfo, sessionCookie});
|
||||||
|
} else if (!isResolved) {
|
||||||
|
timeoutId = setTimeout(checkLoginStatus, 1000);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
if (error.message.includes('Execution context was destroyed')) {
|
||||||
|
// 执行上下文被销毁,页面可能发生导航
|
||||||
|
page.once('load', () => {
|
||||||
|
if (!isResolved) {
|
||||||
|
checkLoginStatus();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
setTimeout(checkLoginStatus, 1000);
|
console.error('检查登录状态时发生错误:', error);
|
||||||
|
if (!isResolved) {
|
||||||
|
isResolved = true;
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
page.on('request', async (request) => {
|
page.on('request', async (request) => {
|
||||||
|
if (isResolved) return;
|
||||||
if (request.url().includes('https://you.com/api/instrumentation')) {
|
if (request.url().includes('https://you.com/api/instrumentation')) {
|
||||||
const cookies = await page.cookies();
|
const cookies = await page.cookies();
|
||||||
const sessionCookie = this.extractSessionCookie(cookies);
|
const sessionCookie = this.extractSessionCookie(cookies);
|
||||||
|
|
||||||
// 设置 隐身模式 cookie
|
// 设置隐身模式 cookie
|
||||||
if (sessionCookie) {
|
if (sessionCookie) {
|
||||||
await page.setCookie(...sessionCookie);
|
await page.setCookie(...sessionCookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isResolved = true;
|
||||||
|
clearTimeout(timeoutId);
|
||||||
resolve({loginInfo: null, sessionCookie});
|
resolve({loginInfo: null, sessionCookie});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
page.on('framenavigated', () => {
|
||||||
|
if (!isResolved) {
|
||||||
|
console.log('检测到页面导航,重新检查登录状态');
|
||||||
|
checkLoginStatus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
checkLoginStatus();
|
checkLoginStatus();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1121,7 +1154,7 @@ class YouProvider {
|
|||||||
req_param.append("count", "10");
|
req_param.append("count", "10");
|
||||||
req_param.append("safeSearch", "Off");
|
req_param.append("safeSearch", "Off");
|
||||||
req_param.append("mkt", "zh-HK");
|
req_param.append("mkt", "zh-HK");
|
||||||
req_param.append("enable_worklow_generation_ux", "false");
|
req_param.append("enable_worklow_generation_ux", proxyModel === "openai_o1" || proxyModel === "openai_o1_preview" ? "true" : "false");
|
||||||
req_param.append("domain", "youchat");
|
req_param.append("domain", "youchat");
|
||||||
req_param.append("use_personalization_extraction", "false");
|
req_param.append("use_personalization_extraction", "false");
|
||||||
req_param.append("queryTraceId", traceId);
|
req_param.append("queryTraceId", traceId);
|
||||||
@@ -1319,6 +1352,8 @@ class YouProvider {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 重新发送请求
|
||||||
|
const responseTimeoutTimer = proxyModel === "openai_o1" || proxyModel === "openai_o1_preview" ? 120000 : 60000;
|
||||||
// 重新发送请求
|
// 重新发送请求
|
||||||
async function resendPreviousRequest() {
|
async function resendPreviousRequest() {
|
||||||
try {
|
try {
|
||||||
@@ -1338,8 +1373,8 @@ class YouProvider {
|
|||||||
|
|
||||||
responseTimeout = setTimeout(async () => {
|
responseTimeout = setTimeout(async () => {
|
||||||
if (!responseStarted) {
|
if (!responseStarted) {
|
||||||
console.log("重试请求后仍未收到响应,终止请求");
|
console.log(`${responseTimeoutTimer / 1000}秒内没有收到响应,终止请求`);
|
||||||
emitter.emit("warning", new Error("在重试后仍未收到响应"));
|
emitter.emit("completion", traceId, ` (${responseTimeoutTimer / 1000}秒内没有收到响应,终止请求)`);
|
||||||
emitter.emit("end", traceId);
|
emitter.emit("end", traceId);
|
||||||
self.logger.logRequest({
|
self.logger.logRequest({
|
||||||
email: username,
|
email: username,
|
||||||
@@ -1350,9 +1385,7 @@ class YouProvider {
|
|||||||
unusualQueryVolume: unusualQueryVolumeTriggered,
|
unusualQueryVolume: unusualQueryVolumeTriggered,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, 60000);
|
}, responseTimeoutTimer);
|
||||||
|
|
||||||
await setupEventSource(page, url, traceId, customEndMarker);
|
|
||||||
|
|
||||||
if (stream) {
|
if (stream) {
|
||||||
heartbeatInterval = setInterval(() => {
|
heartbeatInterval = setInterval(() => {
|
||||||
@@ -1364,7 +1397,7 @@ class YouProvider {
|
|||||||
}
|
}
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
await setupEventSource(page, url, traceId, customEndMarker);
|
||||||
return true;
|
return true;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("重新发送请求时发生错误:", error);
|
console.error("重新发送请求时发生错误:", error);
|
||||||
@@ -1387,11 +1420,11 @@ class YouProvider {
|
|||||||
|
|
||||||
responseTimeout = setTimeout(async () => {
|
responseTimeout = setTimeout(async () => {
|
||||||
if (!responseStarted && !clientState.isClosed()) {
|
if (!responseStarted && !clientState.isClosed()) {
|
||||||
console.log("60秒内没有收到响应,尝试重新发送请求");
|
console.log(`${responseTimeoutTimer / 1000}秒内没有收到响应,尝试重新发送请求`);
|
||||||
const retrySuccess = await resendPreviousRequest();
|
const retrySuccess = await resendPreviousRequest();
|
||||||
if (!retrySuccess) {
|
if (!retrySuccess) {
|
||||||
console.log("重试请求时发生错误,终止请求");
|
console.log("重试请求时发生错误,终止请求");
|
||||||
emitter.emit("warning", new Error("重试请求时发生错误"));
|
emitter.emit("completion", traceId, new Error("重试请求时发生错误"));
|
||||||
emitter.emit("end", traceId);
|
emitter.emit("end", traceId);
|
||||||
self.logger.logRequest({
|
self.logger.logRequest({
|
||||||
email: username,
|
email: username,
|
||||||
@@ -1415,7 +1448,7 @@ class YouProvider {
|
|||||||
unusualQueryVolume: unusualQueryVolumeTriggered,
|
unusualQueryVolume: unusualQueryVolumeTriggered,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, 60000);
|
}, responseTimeoutTimer);
|
||||||
|
|
||||||
if (stream) {
|
if (stream) {
|
||||||
heartbeatInterval = setInterval(() => {
|
heartbeatInterval = setInterval(() => {
|
||||||
@@ -1427,7 +1460,6 @@ class YouProvider {
|
|||||||
}
|
}
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始执行 setupEventSource
|
// 初始执行 setupEventSource
|
||||||
await setupEventSource(page, url, traceId, customEndMarker);
|
await setupEventSource(page, url, traceId, customEndMarker);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user