From 4df0addffb676c2c6afbde5b6a257883107b0052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=9B=E8=83=A4=E6=B1=A0?= Date: Sat, 17 Dec 2022 13:07:33 +0800 Subject: [PATCH] fix: use only one browser instance with debbugger url endpoint --- apps/chat.js | 4 ---- utils/browser.js | 47 +++++++++++++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/apps/chat.js b/apps/chat.js index 594ae47..4a14bab 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -195,7 +195,6 @@ export class chatgpt extends plugin { await this.chatGPTApi.init() } catch (e) { await this.reply('chatgpt初始化出错:' + e.msg, true) - await this.chatGPTApi.close() } let previousConversation = await redis.get(`CHATGPT:CONVERSATIONS:${e.sender.user_id}`) let conversation = null @@ -236,7 +235,6 @@ export class chatgpt extends plugin { const blockWord = blockWords.split(',').find(word => response.toLowerCase().includes(word.toLowerCase())) if (blockWord) { await this.reply('返回内容存在敏感词,我不想回答你', true) - await this.chatGPTApi.close() return } let userSetting = await redis.get(`CHATGPT:USER:${e.sender.user_id}`) @@ -260,7 +258,6 @@ export class chatgpt extends plugin { const blockWord = blockWords.split(',').find(word => responseAppend.toLowerCase().includes(word.toLowerCase())) if (blockWord) { await this.reply('返回内容存在敏感词,我不想回答你', true) - await this.chatGPTApi.close() return } if (responseAppend.indexOf('conversation') > -1 || responseAppend.startsWith("I'm sorry")) { @@ -284,6 +281,5 @@ export class chatgpt extends plugin { logger.error(e) await this.reply(`与OpenAI通信异常,请稍后重试:${e}`, true, { recallMsg: e.isGroup ? 10 : 0 }) } - await this.chatGPTApi.close() } } diff --git a/utils/browser.js b/utils/browser.js index bde2417..cf2ce8e 100644 --- a/utils/browser.js +++ b/utils/browser.js @@ -4,9 +4,6 @@ import StealthPlugin from 'puppeteer-extra-plugin-stealth' import { getOpenAIAuth } from './openai-auth.js' import delay from 'delay' import { v4 as uuidv4 } from 'uuid' -import pTimeout, { TimeoutError } from 'p-timeout' -import { getBrowser } from 'chatgpt' -import { PuppeteerExtraPluginRecaptcha } from 'puppeteer-extra-plugin-recaptcha' const chatUrl = 'https://chat.openai.com/chat' let puppeteer = {} @@ -15,7 +12,8 @@ class Puppeteer { let args = [ '--exclude-switches', '--no-sandbox', - 'enable-automation' + 'enable-automation', + '--remote-debugging-port=51777' // '--shm-size=1gb' ] if (Config.proxy) { @@ -63,15 +61,18 @@ class Puppeteer { this.lock = true logger.mark('puppeteer Chromium 启动中...') - - /** 初始化puppeteer */ - this.browser = await puppeteer.launch(this.config).catch((err) => { - logger.error(err.toString()) - if (String(err).includes('correct Chromium')) { - logger.error('没有正确安装Chromium,可以尝试执行安装命令:node ./node_modules/puppeteer/install.js') - } - }) - + const browserURL = 'http://127.0.0.1:51777' + try { + this.browser = await puppeteer.connect({ browserURL }) + } catch (e) { + /** 初始化puppeteer */ + this.browser = await puppeteer.launch(this.config).catch((err) => { + logger.error(err.toString()) + if (String(err).includes('correct Chromium')) { + logger.error('没有正确安装Chromium,可以尝试执行安装命令:node ./node_modules/puppeteer/install.js') + } + }) + } this.lock = false if (!this.browser) { @@ -126,7 +127,7 @@ export class ChatGPTPuppeteer extends Puppeteer { async init () { if (this.inited) { - return + return true } try { // this.browser = await getBrowser({ @@ -147,8 +148,14 @@ export class ChatGPTPuppeteer extends Puppeteer { await this._page.goto(chatUrl, { waitUntil: 'networkidle2' }) + while ((await this._page.title()).toLowerCase().indexOf('moment') > -1) { + // if meet captcha + // await this._page.solveRecaptchas() + await delay(300) + } + await delay(300) if (!await this.getIsAuthenticated()) { - console.log('需要登录,准备进行自动化登录') + logger.info('需要登录,准备进行自动化登录') await getOpenAIAuth({ email: this._email, password: this._password, @@ -156,7 +163,9 @@ export class ChatGPTPuppeteer extends Puppeteer { page: this._page, isGoogleLogin: this._isGoogleLogin }) - console.log('登陆完成') + logger.info('登陆完成') + } else { + logger.info('无需登录') } this.inited = true } catch (err) { @@ -524,7 +533,9 @@ export class ChatGPTPuppeteer extends Puppeteer { } async close () { - await this.browser.close() + if (this.browser) { + await this.browser.close() + } this._page = null this.browser = null } @@ -533,7 +544,7 @@ export class ChatGPTPuppeteer extends Puppeteer { async _getInputBox () { // [data-id="root"] - return this._page.$('textarea') + return this._page?.$('textarea') } }