From db6e3cd86c5e73d25c49e4eb29062ff4d5158016 Mon Sep 17 00:00:00 2001 From: foxhui Date: Thu, 11 Dec 2025 02:03:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Gemini=20Business?= =?UTF-8?q?=20=E8=87=AA=E5=8A=A8=E7=BB=AD=E7=99=BB=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E8=A2=AB=E5=A4=9A=E6=AC=A1=E8=A7=A6=E5=8F=91=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/backend/adapter/gemini_biz.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/backend/adapter/gemini_biz.js b/lib/backend/adapter/gemini_biz.js index d18fb2d..8cccf6c 100644 --- a/lib/backend/adapter/gemini_biz.js +++ b/lib/backend/adapter/gemini_biz.js @@ -17,6 +17,9 @@ import { logger } from '../../utils/logger.js'; // Gemini Biz 输入框选择器 const INPUT_SELECTOR = 'ucs-prosemirror-editor .ProseMirror'; +// 防止重复处理登录的锁 +let isHandlingAuth = false; + /** * 处理账户选择页面跳转 * @param {import('puppeteer').Page} page @@ -24,9 +27,13 @@ const INPUT_SELECTOR = 'ucs-prosemirror-editor .ProseMirror'; * @returns {Promise} 是否处理了跳转 */ async function handleAccountChooser(page) { + // 防止重复处理 + if (isHandlingAuth) return false; + try { const currentUrl = page.url(); if (currentUrl.includes('auth.business.gemini.google/account-chooser')) { + isHandlingAuth = true; logger.info('适配器', '[登录器] 检测到账户选择页面,尝试自动确认...'); // 尝试查找提交按钮 (通常是标准的 button[type="submit"]) @@ -58,13 +65,16 @@ async function handleAccountChooser(page) { // 额外缓冲时间,确保页面完全加载 await sleep(2000, 3000); + isHandlingAuth = false; return true; } else { logger.warn('适配器', '[登录器] 未找到确认按钮 button[type="submit"]'); + isHandlingAuth = false; } } } catch (err) { logger.warn('适配器', `[登录器] 处理账户选择页面失败: ${err.message}`); + isHandlingAuth = false; } return false; }