parent
5216f6fc0a
commit
fadf40e3fc
|
@ -4,11 +4,15 @@ import lodash from 'lodash'
|
|||
import { segment } from 'icqq'
|
||||
import chokidar from 'chokidar'
|
||||
import cfg from '../config/config.js'
|
||||
import os from 'os'
|
||||
|
||||
const _path = process.cwd()
|
||||
|
||||
let puppeteer = {}
|
||||
|
||||
// mac地址
|
||||
let mac =''
|
||||
|
||||
class Puppeteer {
|
||||
constructor () {
|
||||
this.browser = false
|
||||
|
@ -72,13 +76,45 @@ class Puppeteer {
|
|||
|
||||
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')
|
||||
let connectFlag = false
|
||||
try {
|
||||
//如果是pm2启动,尝试连接已有实例
|
||||
if (process.env.pm_id) {
|
||||
//获取Mac地址
|
||||
if (!mac){
|
||||
mac = await this.getMac()
|
||||
this.browserMacKey = `Yz:chromium:browserWSEndpoint:${mac}`
|
||||
}
|
||||
//是否有browser实例
|
||||
const browserUrl = await redis.get(this.browserMacKey)
|
||||
if (browserUrl){
|
||||
const browserWSEndpoint = await puppeteer.connect({browserWSEndpoint: browserUrl}).catch((err) => {
|
||||
logger.error("puppeteer Chromium 缓存的实例已关闭")
|
||||
redis.del(this.browserMacKey)
|
||||
})
|
||||
//如果有实例,直接使用
|
||||
if (browserWSEndpoint) {
|
||||
this.browser = browserWSEndpoint
|
||||
if (this.browser) {
|
||||
connectFlag = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}catch (e) {
|
||||
logger.error("puppeteer Chromium 尝试连接已有实例失败")
|
||||
}
|
||||
|
||||
|
||||
if (!this.browser||!connectFlag){
|
||||
//如果没有实例,初始化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
|
||||
|
||||
|
@ -86,8 +122,17 @@ class Puppeteer {
|
|||
logger.error('puppeteer Chromium 启动失败')
|
||||
return false
|
||||
}
|
||||
|
||||
logger.mark('puppeteer Chromium 启动成功')
|
||||
if (connectFlag){
|
||||
logger.mark('puppeteer Chromium 已连接启动的实例')
|
||||
}else {
|
||||
console.log("chromium",this.browser.wsEndpoint())
|
||||
if (this.browserMacKey) {
|
||||
//缓存一下实例30天
|
||||
const expireTime = 60 * 60 * 24 * 30
|
||||
await redis.set(this.browserMacKey, this.browser.wsEndpoint(), { EX: expireTime })
|
||||
}
|
||||
logger.mark('puppeteer Chromium 启动成功')
|
||||
}
|
||||
|
||||
/** 监听Chromium实例是否断开 */
|
||||
this.browser.on('disconnected', (e) => {
|
||||
|
@ -98,6 +143,33 @@ class Puppeteer {
|
|||
return this.browser
|
||||
}
|
||||
|
||||
//获取Mac地址
|
||||
async getMac () {
|
||||
//获取Mac地址
|
||||
let mac="00:00:00:00:00:00"
|
||||
try {
|
||||
const network = os.networkInterfaces()
|
||||
let osMac
|
||||
//判断系统
|
||||
if (os.platform() === 'win32') {
|
||||
//windows下获取mac地址
|
||||
let osMacList = Object.keys(network).map(key => network[key]).flat()
|
||||
osMacList=osMacList.filter(item => item.family === 'IPv4'&&item.mac!==mac)
|
||||
osMac = osMacList[0].mac
|
||||
} else if (os.platform() === 'linux') {
|
||||
//linux下获取mac地址
|
||||
osMac = network.eth0.filter(item => item.family === 'IPv4'&&item.mac!==mac)[0].mac
|
||||
}
|
||||
if (osMac) {
|
||||
mac = String(osMac)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log("获取Mac地址失败", e.toString())
|
||||
}
|
||||
mac = mac.replace(/:/g, '')
|
||||
return mac
|
||||
}
|
||||
|
||||
/**
|
||||
* `chromium` 截图
|
||||
* @param data 模板参数
|
||||
|
|
Loading…
Reference in New Issue